Сценарий выполняет команду нормально, но не удается сохранить вывод в переменную.

Чтобы сделать это так, как это обычно делают скрипты инициализации, когда foo запускает bar, вы должны записать PID bar в файл с именем /var/run/bar (или в аналогичное место, в зависимости от вашей ОС ). Затем, когда вы вызываете foo stop, вы читаете PID и соответствующим образом сигнализируете процессу bar. Конечно, есть и другие решения, но это похоже на ответ из учебника.

0
23.03.2019, 16:37
2 ответа

Похоже, вы нашли проблему. Вы должны заключать в кавычки только строку, переданную в echo, а не всю команду целиком :

.
output=$("echo foo")

Вместо этого должно быть:

output=$(echo "foo")

Если вы хотите, чтобы переменная outputсодержала буквальную строку echo foo, вы должны просто установить ее как:

output='echo foo'

, но мог бы и:

output=$(echo 'echo foo')
1
28.01.2020, 02:40

Как и следовало ожидать, команды внутри круглых скобок создают подоболочку. Но $()— это не то, что вы могли подумать. Он не возвращает вывод команды в виде строки, он подставляет вывод команды в оболочку. Если вам нужны доказательства, попробуйте это:$(echo "echo 123")

Вместо этого вы хотите использовать двойные кавычки, чтобы захватить его в строку вместо массива (вывода, разделенного пробелами ), который выполняется в оболочке.

output="$(echo foo)"

Обратите внимание, что это проблема не только zsh, но и bash.

0
28.01.2020, 02:40

Теги

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