Bash
在 grep 語句中使用 $BASHPID
我試圖從 pgrep 返回的結果中排除子 shell 的 PID。請注意,文件的名稱與傳遞給 pgrep 的名稱相同。為什麼設置一個等於 BASHPID 的變數允許“grep -v”在下面工作?我正在使用 Bash 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"
管道右側的命令在子 shell 中執行 - 因此,它們的 $BASHPID 是不同的。