Новый процесс создается при проверке с помощью «if» в bash

Новый процесс создается при проверке с помощью «if» в bash
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.

Связанный контент