Проблема выполнения в команде 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,

Любой достойный редактор выделит синтаксис для вас и поможет вам обнаружить любые ошибки.

Другие вопросы по тегам