我需要获取命令的完整输出并获取其pid。问题是获得pid是这样的:
(nmcli d wifi connect "$1" password "$2") & PID=$!
并抓取输出的工作原理如下:
output="$(nmcli d wifi connect $1 password $2)"
我如何将这两者结合起来?
答案 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;的值。变量显式(通过赋值)。但是,如果您询问的功能是可能的,那么变量的值将隐式更改(这很容易出错)。
您可以通过将后台命令的输出重定向到文件来实现相同的功能。