Чтобы сделать это так, как это обычно делают скрипты инициализации, когда foo запускает bar, вы должны записать PID bar в файл с именем /var/run/bar (или в аналогичное место, в зависимости от вашей ОС ). Затем, когда вы вызываете foo stop, вы читаете PID и соответствующим образом сигнализируете процессу bar. Конечно, есть и другие решения, но это похоже на ответ из учебника.
Похоже, вы нашли проблему. Вы должны заключать в кавычки только строку, переданную в echo
, а не всю команду целиком :
output=$("echo foo")
Вместо этого должно быть:
output=$(echo "foo")
Если вы хотите, чтобы переменная output
содержала буквальную строку echo foo
, вы должны просто установить ее как:
output='echo foo'
, но мог бы и:
output=$(echo 'echo foo')
Как и следовало ожидать, команды внутри круглых скобок создают подоболочку. Но $()— это не то, что вы могли подумать. Он не возвращает вывод команды в виде строки, он подставляет вывод команды в оболочку. Если вам нужны доказательства, попробуйте это:$(echo "echo 123")
Вместо этого вы хотите использовать двойные кавычки, чтобы захватить его в строку вместо массива (вывода, разделенного пробелами ), который выполняется в оболочке.
output="$(echo foo)"
Обратите внимание, что это проблема не только zsh, но и bash.