PROCESS=$(echo "$LINE" | awk '{print $2}')
или
PROCESS=$(ps aux | grep "$1" | awk '{print $2}')
Я не знаю, почему вы получаете ошибку вы цитируемый. Я не могу воспроизвести его. Когда вы говорите, это:
PROCESS=$LINE | awk '{print $2}'
оболочка расширяет его на что-то вроде этого:
PROCESS='mayoff 10732 ...' | awk '{print $2}'
(Я сократил значение $LINE
сделать пример для чтения.)
Первый подкоманда наборов конвейеров переменной PROCESS
; эта команда настройки переменной не имеет выхода, поэтому awk
немедленно считывает EOF и ничего не печатает. И так как каждая подкоманда конвейера работает в подоболочке, параметр PROCESS
имеет место только в подоболочке, а не в родительской оболочке, выполняющей сценарий, поэтому PROCESS
по-прежнему не установлен для последующих команд в вашем скрипте.
(Обратите внимание, что некоторые версии bash
можно запустить последнюю субкоманду трубопровода в текущей оболочке, а не в субоболочке, но это не влияет на этот пример.)
Вместо установки PROCESS
в субоболочке и ничего не подавая awk
на стандартный ввод, вы хотите подать значение LINE
в awk
и сохранить результат в PROCESS
в текущей оболочке. Поэтому вам нужно запустить команду, которая записывает значение LINE
на свой стандартный вывод и подключает этот стандартный вывод к стандартным входам awk
. Команда echo
может это сделать (или команду printf
, как отметил в своем ответе чепнер).
'' var = 'command'' ' –
' PROCESS = $ LINE | awk '{print $ 2}' 'неверно. Сравните его с первой строкой. –
@EtanReisner, если я попробую 'PROCESS = $ (LINE | awk '{print $ 2}')' Я все еще получаю сообщение об ошибке 'LINE': command not found' – dopatraman