как я могу запустить команду из переменной среды и заставить работать внутренний завершающий амперсанд?

Я не уверен, но будет ли что-то подобное работать?

awk 'NR==4 {print $0}' filename.txt | grep 'test' | sed 's/abc/xyz/g'
4
17.12.2019, 20:24
2 ответа

Единственная обработка, выполняемая при раскрытии переменной, — это разбиение на слова и раскрытие подстановочных знаков. Другие метасимволы оболочки игнорируются.

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

eval "$prompt_acc"

Это будет выполнять всю обычную обработку команд оболочки, включая обработку кавычек, выполнение нескольких команд, разделенных ;, фоновый режим с &, перенаправление ввода-вывода и т. д.

Кстати, prompt_acc— это обычная переменная оболочки, а не переменная окружения. Команда export— это способ поместить переменные в среду.

1
27.01.2020, 20:57

Вы правы, причина в том, что он запускается из переменной окружения. Поэтому весь последующий текст, включая &, передается в качестве аргумента вашему long-running-script.

Обойти это можно, используя вызов $prompt_acc &вместо $prompt_accв файле prompt-to-run. Таким образом, если вы решите не запускать сценарий, &не будет мешать.

2
27.01.2020, 20:57

Теги

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