pgrep이 반환한 결과에서 하위 쉘의 PID를 제외하려고 합니다. 파일 이름은 pgrep에 전달된 이름과 동일합니다. BASHPID와 동일한 변수를 설정하면 "grep -v"가 아래에서 작동하도록 허용하는 이유는 무엇입니까? 저는 배쉬 4.1.2를 사용하고 있습니다.
myprocess.sh
#!/bin/bash
# === Fails ===
pids=$(pgrep -f myprocess | grep -v ${BASHPID} | grep -v $$)
echo "$pids"
echo "-------"
# === Works ===
pids=$(bashpid=${BASHPID}; pgrep -f myprocess | grep -v ${bashpid} | grep -v $$)
echo "$pids"
답변1
파이프 오른쪽에 있는 명령은 하위 쉘에서 실행되므로 $BASHPID가 다릅니다.