Bash

在 grep 語句中使用 $BASHPID

  • September 26, 2014

我試圖從 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 是不同的。

引用自:https://unix.stackexchange.com/questions/157827