我正在使用 Chef 和 ruby,我正在尝试运行 set 命令。
setVarList = %x(set)
如果我只是键入 set 它可以正常工作,但是如果我运行此脚本,则会收到以下错误:
/var/chef/cache/cookbooks/motd/recipes/default.rb:22: command not found: set
怎么了?
正如Anew已经提到的:set是 bash 内置命令,但 ruby %x() shell 是sh。
%x(echo $0)
正如CodeGnome在评论中提出的那样,解决方法是显式运行 bash 。
%x(/bin/bash -c set)
看起来你没有产卵bash
壳。
set
是一个 bash 内置:
4.3.1 内置集合
这个内置函数非常复杂,值得拥有自己的部分。set 允许您更改 shell 选项的值并设置位置参数,或显示 shell 变量的名称和值。
set
set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]
如果没有提供任何选项或参数,set 会显示所有 shell 变量和函数的名称和值,按照当前语言环境排序,格式可以重新用作设置或重置当前设置变量的输入。只读变量不能被重置。在 POSIX 模式下,仅列出 shell 变量。
http://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
尝试运行ps -p $$
以查看生成了哪个 shell。
anew@Wintermute:~$ ps -p $$
PID TTY TIME CMD
10018 ttys001 0:00.11 -bash
anew@Wintermute:~$