Ruby系统('ls')到字符串?

时间:2010-01-25 18:11:41

标签: ruby unix system

我怎么能输出说unix'ls'(桌面,图片,音乐myysong.mp3等)转换为字符串?

3 个答案:

答案 0 :(得分:6)

你的意思是捕获'ls'命令的输出?你可以在Ruby中使用``例如:

mystring = `ls <dir>`
print mystring.strip();

所以,我以为我会编辑我以前的答案。如果您不幸在ls命令中遇到错误(例如路径不存在)或任何其他系统命令,则输出将显示给STDERR,导致它显示在屏幕上是否您喜欢它或不,反引号不会捕获(它们只会获得STDOUT)。 要解决此问题,只需在命令末尾添加2&gt;&amp; 1即可。 例如:

#!/usr/bin/ruby -w

mystring = `ls /path/does/not/exist 2>&1`;
# above will not display anything to screen but will hold error message in mystring
print mystring;
# outputs: ls: cannot access /path/does/not/exist: No such file or directory

希望这有帮助。

答案 1 :(得分:5)

反引号执行系统命令并将其作为字符串返回。

result = `ls ~/Downloads`

puts result.reverse
puts result.split('/')

答案 2 :(得分:2)

如果 使用ls,并且正在使用用户输入,则需要偏执:

d = IO.popen("-"){|f| if f then break f.read else system('ls', user_input) end }

这似乎是最安全的方法,因为它直接将user_input作为ARGV [1]传递给ls,而不是将整个字符串发送到shell。

使用``,/; rm -Rf ~的用户输入将导致悲伤的面孔。使用上面的(可怕的长)方法,它只会导致错误。