Проблема выполнения в команде Linux
Я выполняю команду Linux и выполняю из автоматического сценария.
ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
Теперь, когда я вижу логи скрипта и смотрю на место, где он выполняется, я вижу что-то вроде этого
root@dm365-evm:/usr/share/ti/dvtb# ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
Это заставляет команду не работать должным образом.
Кто-нибудь может подсказать, как я могу запустить его так:
root@dm365-evm:/usr/share/ti/dvtb# ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
3 ответа
Учитывая комментарии после вопроса, уверены ли вы, что текстовый редактор, который вы используете для написания скрипта, не добавляет в вашу строку новые строки (перенос слов)? Т.е. содержит ли ваш файл скрипта символ новой строки в аргументе awk
?
Возможно, вам придется избежать знака доллара, например, \$1.
Я не уверен, почему это было перенесено из StackOverflow, так как вопрос здесь так же неясен, как и здесь.
Похоже, вы пытаетесь получить список идентификаторов PID всех запущенных процессов "dspload -d 1 -e
"но исключая awk
(который вы используете для фильтрации вывода ps
и просто возьмите первый столбец.
Это также похоже на вашу команду, ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
работает из командной строки. В какой бы операционной системе вы не работали, в какой бы оболочке вы не работали. Я подозреваю, что вывод выглядит примерно так:
23875
23874
1368
23873
Я понял, что вместо того, чтобы пытаться запомнить эту сложную командную строку, вы поместили ее в какой-то файл и пытаетесь запустить его как сценарий оболочки, но это не работает. Я понятия не имею, как выглядит этот сценарий оболочки.
Я могу сказать вам, что если ваш скрипт выглядит так:
#!/bin/sh
ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
После его запуска вы получите тот же результат, что и при запуске команды в командной строке bash в Mac OS X.
Если вы извлекли процесс в переменную, вам необходимо убедиться, что он расширен в вызове awk
а именно:
#!/bin/sh
process="dspload -d 1 -e"
ps | awk '/'${process}'/&&!/awk/{print $1}'
Использование одинарных кавычек ('
) будет означать, что $1
, который имеет особое значение в Bourne Shell, не будет расширяться (но будет интерпретироваться awk
,
Любой достойный редактор выделит синтаксис для вас и поможет вам обнаружить любые ошибки.