Рубиновая система ('ls') в строку? - PullRequest
1 голос
/ 25 января 2010

Как получить вывод, скажем, unix 'ls' (рабочий стол, картинки, музыка myysong.mp3 и т. Д.) В строку?

Ответы [ 3 ]

6 голосов
/ 25 января 2010

Вы имеете в виду захват вывода команды 'ls'? Вы можете использовать `` в Ruby. Например:

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

Итак, я думал, что отредактирую свой предыдущий ответ. Если вам не повезло столкнуться с ошибкой в ​​команде ls (скажем, путь не существует, например) или любой другой системной команде, вывод будет отображаться в STDERR, вызывая его вывод на экран, нравится ли вам это. или нет, которые не будут фиксировать обратные метки (они получат только STDOUT). Чтобы обойти это, просто добавьте 2> & 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

Надеюсь, это поможет.

5 голосов
/ 25 января 2010

Backtick выполняет системную команду и возвращает ее вывод в виде строки.

result = `ls ~/Downloads`

puts result.reverse
puts result.split('/')
2 голосов
/ 25 января 2010

Если у вас есть для использования ls, и вы используете пользовательский ввод, вы должны быть параноиком:

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

Кажется, это самый безопасный способ сделать это, потому что он передал user_input в ls напрямую как ARGV [1], а не отправляет всю строку в оболочку.

С ``, пользовательский ввод /; rm -Rf ~ приведет к грустным лицам. С помощью (ужасно длинного) метода, приведенного выше, это просто приведет к ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...