为什么使用“set var = value”获取脚本会打破$ @?

时间:2017-11-21 18:28:35

标签: linux shell centos command-line-arguments

我正在尝试在Centos VM上配置自动注销。我注意到如果我在/etc/profile.d/autologout.sh中创建一个文件,文件中只有set autologout = 30,那么它会破坏任何源/ etc / profile脚本的传递参数。

显示此内容的示例脚本是:

#!/bin/bash 
source /etc/profile 
echo ${@}

当我运行它时,脚本只看到参数“autologout 30”,并且它在运行时没有得到任何我试图传递它的参数。

无论autologout脚本的名称,属性的名称,或者我是否set autologout 30,都会发生这种情况。

有人可以解释一下发生了什么吗?好像autologout.sh正在劫持参数。我对正在发生的事情感到茫然,研究profile.d并且set命令没有任何结果。

1 个答案:

答案 0 :(得分:2)

set不用于修改符合POSIX的shell中的shell变量。相反,当给定位置参数时,它会修改命令行参数列表。

如果您只想为变量指定值,请不要使用set。相反,您的文件应该只包含:

autologout=30

... "$@"将保持原始状态。