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