我正在使用Chef和ruby,我正在尝试运行set命令。
setVarList = %x(set)
如果我只是输入set它工作正常,但如果我运行此脚本,我会收到以下错误:
/var/chef/cache/cookbooks/motd/recipes/default.rb:22: command not found: set
有什么问题?
答案 0 :(得分:3)
正如Anew已经提到过: set 是bash内置命令,但ruby%x()shell是 sh 。
%x(echo $0)
解决方法是明确地运行bash,正如CodeGnome在评论中提出的那样。
%x(/bin/bash -c set)
答案 1 :(得分:2)
看起来你没有产生bash
shell。
set
是一个内置的bash:
4.3.1 Set Builtin
这个内置非常复杂,值得拥有自己的部分。 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:~$