2

我正在使用 Chef 和 ruby​​,我正在尝试运行 set 命令。

setVarList = %x(set)

如果我只是键入 set 它可以正常工作,但是如果我运行此脚本,则会收到以下错误:

/var/chef/cache/cookbooks/motd/recipes/default.rb:22: command not found:   set

怎么了?

4

2 回答 2

3

正如Anew已经提到的:set是 bash 内置命令,但 ruby​​ %x() shell 是sh

%x(echo $0)

正如CodeGnome在评论中提出的那样,解决方法是显式运行 bash 。

%x(/bin/bash -c set)
于 2013-02-13T21:43:21.103 回答
2

看起来你没有产卵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:~$ 
于 2013-02-13T16:41:21.393 回答