나는 유닉스 계열의 초보자입니다. 그리고 나는 검색으로 정말 답을 찾을 수없는 이상한 문제를 만났습니다.리눅스에서 ps 명령
#!/bin/bash
me=`basename "$0"`
echo $(ps -e | grep "$me" | wc -l)
ps -e | grep "$me" | wc -l
해당 bash 스크립트를 실행 한 후 에코는 2를 표시하고 ps는 내가 원하는 것을 1로 표시합니다. 어떻게 될 수 있습니까? 왜 에코는 나에게 추가적인 과정을 보여 줍니까?
참조 : [더 우아한 "ps aux | grep -v grep "] (http://stackoverflow.com/q/9375711/3776858) – Cyrus
'$()'는 쉘의 분기 된 사본 인 서브 쉘을 만듭니다. 그래서'echo $ (ps -e | grep "$ me"| wc -l)'을 실행하고있을 때 실제로 당신의 식과 일치하는 * 더 많은 프로세스가 실행되고 있습니다. –
그런데'ps '를 통해 grepping하는 것은 절대적으로 나쁜 습관이며 어떤 종류의 자동화 된 사용을 위해해서는 안됩니다. 'pgrep'과 같은 도구가 있지만 일부주의 사항을 해결할 수있는 도구가 있지만 프로그램이 이미 실행 중인지 여부를 확인하려는 것이면 훨씬 더 좋은 방법이 있습니다. –