linux - 为什么使用 "set var = value"采购脚本会破坏 $@?

标签 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”并且它没有得到任何我在运行时尝试传递它的参数。

无论自动注销脚本的名称、属性的名称是什么,或者我是否有 set autologout 30,都会发生这种情况。反而。

有人可以解释发生了什么吗?好像 autologout.sh 正在劫持参数。我对正在发生的事情感到茫然,研究 profile.d 和 set 命令什么也没发现。

最佳答案

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

如果你只想给一个变量赋值,不要使用set .相反,您的文件应该只包含:

autologout=30

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

关于linux - 为什么使用 "set var = value"采购脚本会破坏 $@?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47420197/

相关文章:

linux - Ubuntu JeOS 适合生产用途吗?

linux - 使用 tail -F 实时查看文件变化

python - Python shell 和程序中的不同行为

python - CentOS下安装idle-python2.7

linux - Angular2 未处理的 'error' 事件

node.js - 在 Centos 上安装 React JS

postgresql - 永久设置 PGDATA 环境变量 Mac

linux - 尝试设置数据库集群时无法访问目录 "/usr/local/pgsql/data": Permission denied ,

python - 属性错误 : xmlNode instance has no attribute 'isCountNode'

linux - scp 使用私钥 auth 将目录复制到另一台服务器