В моем Raspbian я использовал команду:
pgrep -c ^
Я думаю, что эта команда должна выполнять подсчет всех процессов без использования более привычного метода
ps -A --no-headers | wc -l
Однако, при запуске pgrep - c ^ в сценарии (скажем, при входе в систему) я хочу вычесть 1 из подсчитанного количества запущенных процессов, чтобы вызываемая оболочка (скажем, «sh») выполняла сценарий (или сценарий). само по себе) не считается процессом ... Я не знаю, следите ли вы за мной по этому вопросу. Затем я начал проводить эксперименты с командой pgrep
Вот пример моего сценария:
#!/bin/sh
ps1=$(pgrep -c ^)
ps2=$(expr $(pgrep -c ^) - 1) # minus 1
ps3=$(expr $(pgrep -c ^) - 2) # minus 2
echo ${ps1}
echo ${ps2} # ps1 == ps2
echo ${ps3}
Я получаю результаты (в моем случае):
112
112
111
а) В скрипте изменение порядка оценки ps1 и ps2 не имеет никакого значения. Дело в том, что ps1 и ps2 всегда равны (не знаю почему).
b) Одни и те же команды вводятся непосредственно в приглашение, как показано ниже:
$> pgrep -c ^; expr $(pgrep -c ^) - 1
показывает (как и ожидалось) ):
111
110
c) Но если я изменю команду для использования echo:
$> echo "$(pgrep -c ^) : $(expr $(pgrep -c ^) - 1)"
даже при изменении порядка оценки:
"$> echo "$(expr $(pgrep -c ^) - 1) : $(pgrep -c ^)"
in В обоих случаях, как в скрипте, я получаю:
112 : 112
Вопросы:
1) Почему вне скрипта / echo он работает как положено, но внутри скрипта или внутри и echo / printf значения одинаковы?
2) Является ли команда pgrep - c ^ правильной для подсчета запущенных процессов, как я хочу сделать?
Спасибо