我要定义一个函数来包装%x
如下定义红宝石功能包%×
def myx(arg)
puts %x("#{arg}")
end
这是确定调用myx("ls")
但没有打电话myx("ls /usr")
。该错误消息是
SH:1:LS/USR:找不到
我理解错误。这是因为整个单词ls /usr
被视为传递给shell的单个参数。但我该如何解决这个问题?
我要定义一个函数来包装%x
如下定义红宝石功能包%×
def myx(arg)
puts %x("#{arg}")
end
这是确定调用myx("ls")
但没有打电话myx("ls /usr")
。该错误消息是
SH:1:LS/USR:找不到
我理解错误。这是因为整个单词ls /usr
被视为传递给shell的单个参数。但我该如何解决这个问题?
不要在%x
中引用"
的命令行。
arg = "ls /usr"
%x("#{arg}")
将发送"ls /usr"
作为单个参数的系统,因为如果执行壳以下:
$ "ls /usr"
系统将尝试找到一个名为ls /usr
的命令/可执行文件,从而导致你遇到的问题。因此,更新方法下面的工作
def myx(arg)
puts %x(#{arg})
end
myx('ls /usr')
以前的答案
def myx(arg)
puts %x("#{arg}")
end
myx('"ls /usr"')
的作品,如果你执行的外壳下面为:
$ ""ls /usr""
# which results in
$ ls /usr
那不是引用命令,相反,它使用额外的"
来清除报价。
请务必注明您的整个命令字符串内:
def myx(arg)
puts %x("#{arg}")
end
myx('"ls /usr"')
或者反引号不需要串被引用:
def myx(arg)
puts `#{arg}`
end
myx("ls /usr")
即使在我看来更好:
def myx(arg)
system(*arg)
end
myx(['ls', '/usr'])
输出:
bin
games
include
lib
lib32
lib64
libx32
local
sbin
share
src
前两个将整个命令作为字符串传递给shell执行。最后一个绕过shell,ruby自己执行它。
'''ls/usr“''是什么意思?为什么要用单引号和双引号? –
为什么不'def myx(arg);放\'#{arg} \'; end' – huocp