bash 中的 $_ 与破折号脚本
$_ in bash vs. dash scripts
我需要将一个简短的脚本从 bash
移植到 dash
(即 Debian 10 下的 sh
)。它包含以下行:
chown root:www-data /etc/nginx/conf.d && chmod 775 $_
这现在失败了,因为 $_
使用 bash
保存了前一个命令的最后一个参数(即 /etc/nginx/conf.d
),但现在使用非交互式 dash
保存了一个不同的值。作为另一个例子,bash -c 'echo 1 2 && echo $_'
和 dash -c 'echo 1 2 && echo $_'
的输出也不同。
在 dash
中形成上述类型的“简洁”语句的典型方法是什么(不求助于更专业的命令,例如 install
)?
随便写一个函数。
chownmod () { chown "" "" && chmod "" ""; }
并用以下内容替换该行。
chownmod root:www-data 775 /etc/nginx/conf.d
只需定义一个显式变量来保存目录名称。
d=/etc/nginx/conf.d
chown root:www-data "$d" && chmod 755 "$d"
$_
旨在用作交互式快捷方式。在编辑器的帮助下编写的脚本实际上并不需要这样的快捷方式。
我需要将一个简短的脚本从 bash
移植到 dash
(即 Debian 10 下的 sh
)。它包含以下行:
chown root:www-data /etc/nginx/conf.d && chmod 775 $_
这现在失败了,因为 $_
使用 bash
保存了前一个命令的最后一个参数(即 /etc/nginx/conf.d
),但现在使用非交互式 dash
保存了一个不同的值。作为另一个例子,bash -c 'echo 1 2 && echo $_'
和 dash -c 'echo 1 2 && echo $_'
的输出也不同。
在 dash
中形成上述类型的“简洁”语句的典型方法是什么(不求助于更专业的命令,例如 install
)?
随便写一个函数。
chownmod () { chown "" "" && chmod "" ""; }
并用以下内容替换该行。
chownmod root:www-data 775 /etc/nginx/conf.d
只需定义一个显式变量来保存目录名称。
d=/etc/nginx/conf.d
chown root:www-data "$d" && chmod 755 "$d"
$_
旨在用作交互式快捷方式。在编辑器的帮助下编写的脚本实际上并不需要这样的快捷方式。