Bash - 如何将命令的输出写入变量并获取命令 pid
Bash - how to write the output of a command into a variable and also get the commands pid
我需要获取命令的完整输出并获取其 pid。问题是获取 pid 是这样工作的:
(nmcli d wifi connect "" password "") & PID=$!
获取输出的工作方式如下:
output="$(nmcli d wifi connect password )"
如何将这两者结合起来?
你的意思是这样的吗?
#/bin/env bash
nmcli d wifi connect "" password "" > /tmp/$$.tmp &
PID=$!
wait
output=$(</tmp/$$.tmp)
...
我认为最好的办法是使用临时文件:
f="${TMPDIR:-/tmp}/tmp.$$"
trap "rm $f" EXIT
nmcli d wifi connect "" password "" >"$f" &
nm_pid=$!
# ... do stuff
wait $nm_pid
# ... use contents of "$f"
(我在您的 $1 和 $2 周围添加了引号 - 在脚本中很少会遇到 过多引用 的情况。
这是不可能的。您想要 运行 在后台编程并将它的输出同时捕获到一个变量中。如果那是可能的,那么在没有您的显式命令的情况下,变量的值将在后台程序执行期间发生变化。例如:
output="$(nmcli d wifi connect password )" &
echo $output #maybe empty
sleep 10
echo $output #what now?
在上面的脚本中,我们没有显式地(通过赋值)更改 "output" 变量的值。但是,如果您询问的功能是可能的,那么变量的值将隐式更改(这很容易出错)。
您可以通过将后台命令的输出重定向到文件来实现相同的功能。
我需要获取命令的完整输出并获取其 pid。问题是获取 pid 是这样工作的:
(nmcli d wifi connect "" password "") & PID=$!
获取输出的工作方式如下:
output="$(nmcli d wifi connect password )"
如何将这两者结合起来?
你的意思是这样的吗?
#/bin/env bash
nmcli d wifi connect "" password "" > /tmp/$$.tmp &
PID=$!
wait
output=$(</tmp/$$.tmp)
...
我认为最好的办法是使用临时文件:
f="${TMPDIR:-/tmp}/tmp.$$"
trap "rm $f" EXIT
nmcli d wifi connect "" password "" >"$f" &
nm_pid=$!
# ... do stuff
wait $nm_pid
# ... use contents of "$f"
(我在您的 $1 和 $2 周围添加了引号 - 在脚本中很少会遇到 过多引用 的情况。
这是不可能的。您想要 运行 在后台编程并将它的输出同时捕获到一个变量中。如果那是可能的,那么在没有您的显式命令的情况下,变量的值将在后台程序执行期间发生变化。例如:
output="$(nmcli d wifi connect password )" &
echo $output #maybe empty
sleep 10
echo $output #what now?
在上面的脚本中,我们没有显式地(通过赋值)更改 "output" 变量的值。但是,如果您询问的功能是可能的,那么变量的值将隐式更改(这很容易出错)。
您可以通过将后台命令的输出重定向到文件来实现相同的功能。