Это довольно распространенная проблема, и самое простое решение - просто заключить символ в шаблон grep в квадратные скобки:
ps -A -f | grep "[s]leep 1234"
Теперь это будет соответствовать sleep 1234
, но не [s]leep 1234
(из-за литерала ]
между s
и l
), и строка grep больше не совпадает.
Причина, по которой grep
присутствует в списке процессов, заключается в том, что конвейеры выполняются справа налево, поэтому grep
фактически выполняется до ps
.