我正在尝试如下回显命令prstat -a
,但是它不起作用。
是因为输出不是静态的还是其他原因?
这是我正在使用的命令:
echo"$(prstat -a)"
答案 0 :(得分:0)
是的,我想实时输出变量。
然后,您必须将命令的输出缓冲在某处。您可以使用fifo做到这一点。将命令的输出重定向到fifo并将其输出。您也可以将命令输出到文件中,但是会急剧增长。请注意,从fifo读取是一项阻止操作。请注意,如果没有进程正在侦听,则向fifo写入也会阻塞。
以下脚本只是一个起点。您将需要在fifo访问上添加一些锁定,缓冲命令输出,指定一些缓冲最大大小,等等。等等。代码注释。
# create a temporary fifo
tmp=$(mktemp -u)
mkfifo "$tmp"
# now we start the prstat command _in the background_
# the output of the command will go into fifo file
# to be safe, we close stdin
prstat > "$tmp" < /dev/null &
prstat_pid=$!
# to be sure everything is fine, remember to pick out the trash
# kill prstat after your script exists
# remove the remporary fifo after your script exists
trap_exit() {
if kill -0 "$prstat_pid"; then
kill "$prstat_pid"
fi
rm -r "$tmp"
}
trap 'trap_exit' EXIT
# ok now, your work here
echo "some work"
# now you can read from the fifo
# note that reading on a fifo will _block_ your script
# so you have to use a timeout or something
# otherwise you will be blocked forever
timeout 0.1 cat "$tmp"
# continue with your work
echo "some other work"
答案 1 :(得分:0)
prstat -a
无需$(...)
捕获命令输出,而只需echo
将其撤消即可。您可以直接运行它。