Я не уверен, но будет ли что-то подобное работать?
awk 'NR==4 {print $0}' filename.txt | grep 'test' | sed 's/abc/xyz/g'
Единственная обработка, выполняемая при раскрытии переменной, — это разбиение на слова и раскрытие подстановочных знаков. Другие метасимволы оболочки игнорируются.
Если вы хотите, чтобы содержимое переменной выполнялось так, как если бы вы ввели команду, используйте команду eval
:
eval "$prompt_acc"
Это будет выполнять всю обычную обработку команд оболочки, включая обработку кавычек, выполнение нескольких команд, разделенных ;
, фоновый режим с &
, перенаправление ввода-вывода и т. д.
Кстати, prompt_acc
— это обычная переменная оболочки, а не переменная окружения. Команда export
— это способ поместить переменные в среду.
Вы правы, причина в том, что он запускается из переменной окружения. Поэтому весь последующий текст, включая &
, передается в качестве аргумента вашему long-running-script
.
Обойти это можно, используя вызов $prompt_acc &
вместо $prompt_acc
в файле prompt-to-run
. Таким образом, если вы решите не запускать сценарий, &
не будет мешать.