为什么采购带有 "set var = value" 的脚本会中断 $@?
Why does sourcing a script with "set var = value" break $@?
我正在尝试在我的 Centos VM 上配置自动注销。我注意到,如果我在 /etc/profile.d/autologout.sh 创建一个文件,文件中只有 set autologout = 30
,那么它会中断任何来源 /etc/profile 的脚本的传递参数。
显示此内容的示例脚本是:
#!/bin/bash
source /etc/profile
echo ${@}
当我 运行 它时,脚本只看到参数 "autologout 30" 而它没有得到任何参数我在 运行 时试图传递它。
无论自动注销脚本的名称、属性 的名称如何,或者如果我有 set autologout 30
,都会发生这种情况。
有人可以解释一下发生了什么吗?就好像 autologout.sh 正在劫持参数。我对正在发生的事情一头雾水,研究 profile.d 并且设置命令没有任何结果。
set
不用于修改符合 POSIX 的 shell 中的 shell 变量。相反,当给定位置参数时,它会修改命令行参数列表。
如果您只想为变量赋值,请不要使用set
。相反,您的文件应该只包含:
autologout=30
...并且 "$@"
将保持其原始状态。
我正在尝试在我的 Centos VM 上配置自动注销。我注意到,如果我在 /etc/profile.d/autologout.sh 创建一个文件,文件中只有 set autologout = 30
,那么它会中断任何来源 /etc/profile 的脚本的传递参数。
显示此内容的示例脚本是:
#!/bin/bash
source /etc/profile
echo ${@}
当我 运行 它时,脚本只看到参数 "autologout 30" 而它没有得到任何参数我在 运行 时试图传递它。
无论自动注销脚本的名称、属性 的名称如何,或者如果我有 set autologout 30
,都会发生这种情况。
有人可以解释一下发生了什么吗?就好像 autologout.sh 正在劫持参数。我对正在发生的事情一头雾水,研究 profile.d 并且设置命令没有任何结果。
set
不用于修改符合 POSIX 的 shell 中的 shell 变量。相反,当给定位置参数时,它会修改命令行参数列表。
如果您只想为变量赋值,请不要使用set
。相反,您的文件应该只包含:
autologout=30
...并且 "$@"
将保持其原始状态。