-2

Я выполняю команду 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 ответа3

1

Учитывая комментарии после вопроса, уверены ли вы, что текстовый редактор, который вы используете для написания сценария, не добавляет в вашу строку новые строки (перенос слов)? То есть, содержит ли ваш файл скрипта символ новой строки в аргументе awk?

0

Возможно, вам придется избежать знака доллара, например, $ 1.

0

Я не уверен, почему это было перенесено из 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, не будет расширен (но будет интерпретироваться awk .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .