Bash - 如何将命令的输出写入变量并获取命令pid

时间:2015-06-05 14:43:32

标签: bash shell process

我需要获取命令的完整输出并获取其pid。问题是获得pid是这样的:

(nmcli d wifi connect "$1" password "$2") & PID=$!

并抓取输出的工作原理如下:

output="$(nmcli d wifi connect $1 password $2)"

我如何将这两者结合起来?

3 个答案:

答案 0 :(得分:4)

我认为最好的办法是使用临时文件:

f="${TMPDIR:-/tmp}/tmp.$$"
trap "rm $f" EXIT
nmcli d wifi connect "$1" password "$2" >"$f" &
nm_pid=$!

# ... do stuff

wait $nm_pid
# ... use contents of "$f"

(我在1美元和2美元左右添加了引号 - 在脚本中遇到过多引用很少见。)

答案 1 :(得分:0)

你的意思是这样吗?

#/bin/env bash
nmcli d wifi connect "$1" password "$2" > /tmp/$$.tmp &
PID=$!
wait
output=$(</tmp/$$.tmp)
...

答案 2 :(得分:0)

这不可能。您希望在后台运行程序并将其同时输出到变量中。如果可能,那么在没有显式命令的情况下,在执行后台程序期间变量的值将会发生变化。例如:

output="$(nmcli d wifi connect $1 password $2)" &
echo $output #maybe empty
sleep 10
echo $output #what now?

在上面的脚本中,我们没有改变&#34;输出&#34;的值。变量显式(通过赋值)。但是,如果您询问的功能是可能的,那么变量的值将隐式更改(这很容易出错)。

您可以通过将后台命令的输出重定向到文件来实现相同的功能。