Классический инструмент для извлечения колонн cut
.
pgrep -fl 'bash script_c.sh' | cut -f1 -d" "
извлечет первый столбец, разделенный пробелами. Это должно на самом деле делать то, что вы хотели. Тем не менее, большая хитрость заключалась в том, что я использовал pgrep
, у которого гораздо более приятный вывод. Если бы я не добавил ключ -l
, не было бы необходимости cut
:
pgrep -f 'bash script_c.sh'
Однако для вашей конкретной задачи вы можете просто использовать pkill
.
Это позволяет убивать процессы по шаблону, например
pkill -f "script_c.sh"
Большим преимуществом является то , что pgrep
и pkill
осознают себя, и только выход / убить соответствие других процессов. В приведенном выше примере у вас будут ложные срабатывания, например, команда grep
. Так что просто используйте pkill
который должен быть доступен в любой современной системе Linux / BSD.
Если вы действительно хотите использовать ps
(что я не рекомендую):
ps ax | grep script_c.sh | grep -v grep | sed -e 's/^ *\([0-9]*\) .*/\1/'
или даже лучше с awk (что лучше при автоматическом разборе макета столбца ps):
ps ax | awk '!/awk/ && /script_c.sh/ { print $1 }'
Обратите внимание, что для обоих вы должны убедиться, что вы не соответствуете себе, т.е. исключить grep и awk из соответствия. Таким образом, использование pgrep
существенно проще. И pgrep
и pkill
- правильные инструменты для решения вашей актуальной проблемы.