Быть произведенным системы () звонит в Ruby

Чтобы все работало, мне нужно было перезапустить httpd дважды, а не один раз:

docker kill --signal="USR1" cgi_test  # (x2)

Я подумал, может быть, это проблема USR1 сигнала (Graceful Restart), но у меня было то же самое с [113 ] сигнал (перезагрузить сейчас). Чтобы применить изменения, мне нужно отправить сигнал дважды. Так выглядит httpd проблема с контейнером.

303
задан Per Lundberg 8 September 2015 в 22:18
поделиться

5 ответов

Я хотел бы немного расширить и уточнить ответ хаоса .

Если вы окружите свою команду обратными кавычками, вам не нужно (явно) вызовите system () вообще. Обратные апострофы выполняют команду и возвращают результат в виде строки. Затем вы можете присвоить значение переменной следующим образом:

output = `ls`
p output

или

printf output # escapes newline chars
339
ответ дан 23 November 2019 в 01:23
поделиться

Иначе:

f = open("|ls")
foo = f.read()

Обратите внимание, что это - символ "канала" прежде "ls" в открытом. Это может также использоваться для питания данных во вход стандарта программ, а также чтение его стандартного вывода.

19
ответ дан dwc 23 November 2019 в 01:23
поделиться

Вы используете обратные галочки:

`ls`
20
ответ дан chaos 23 November 2019 в 01:23
поделиться

Я обнаружил, что следующее полезно, если вам нужно возвращаемое значение:

result = %x[ls]
puts result

Я специально хотел вывести список идентификаторов всех процессов Java на моем компьютере , и использовал это:

ids = %x[ps ax | grep java | awk '{ print $1 }' | xargs]
14
ответ дан 23 November 2019 в 01:23
поделиться

В качестве прямой замены системы (...) вы можете использовать Open3.popen3 (...)

Дальнейшее обсуждение: http://tech.natemurray.com/2007/03/ruby-shell-commands.html

7
ответ дан 23 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: