Как я могу получить вывод о том, что unix 'ls' (Desktop, Pictures, Music myysong.mp3 и т. Д.) Преобразуется в строку?Рубиновая система ('ls') на строку?
ответ
Обратный ход выполняет системную команду и возвращает ее как строку.
result = `ls ~/Downloads`
puts result.reverse
puts result.split('/')
+1 Это мило. Узнавайте что-то новое каждый день. :) Я использовал систему все время, не зная, что вывод был возвращен как строка. – Beanish
Каждый метод Ruby возвращает что-то. Конечно, иногда это что-то «ноль», но чаще всего это возвращение именно так, как вы ожидаете. Просто запустите 'irb' и попробуйте. Если он печатает выходные данные, он возвращает что-то. –
Вы имеете в виду захват вывода команды '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
Надеюсь, это поможет.
Так формально использовать полуколоны! – tadman
Это привычка, к сожалению, я еще не смог ударить; – user198470
Я люблю точки с запятой. – JAL
Если есть использовать Ls, и с помощью пользовательского ввода, вам нужно быть параноиком:
d = IO.popen("-"){|f| if f then break f.read else system('ls', user_input) end }
Это кажется самым безопасным способом сделать это, потому что он прошел user_input Л.С. напрямую как ARGV [1], а не отправлять всю строку в оболочку.
С ``, пользовательский ввод /; rm -Rf ~
приведет к печальным лицам. При использовании метода (ужасно длинный) выше это приведет к ошибке.
Пара или цитата вашего первоначального отступа в последнем предложении, чтобы исправить подсветку синтаксиса для вашего комментария. –
Лучше не прибегать к снарядам, если вы можете помочь! Любая причина, почему не 'Dir.entries' или' foreach'? – bobince