
ps -ef | while read line; do
for i in $line; do
if [ $i = 'bash' ]; then
echo $line;
fi;
done;
done;
unset i;
Команда выполняется правильно, отображая процессы Bash, но создается и отображается дополнительный процесс Bash. Я надеюсь, что он что-то делает внутри if
проверки. Я пробовал запустить ее с/без одинарных/двойных кавычек как для, так $i
и bash
внутри if
условия. Процесс все еще создается и отображается. Я мог бы использовать grep
для получения вывода, но хотел попробовать это таким образом.
Пожалуйста, поправьте меня.
решение1
Дополнительный процесс создается трубой.
Для получения более подробной информации прочтите этоочень хорошее объяснение bash и дерева процессов.
Обратите внимание, что вывод ps
не предназначен для разбора. При попытке разбора ps
вам, скорее всего, лучше использовать pgrep
.