无法回显prstat -a命令

时间:2019-07-15 11:36:44

标签: shell

我正在尝试如下回显命令prstat -a,但是它不起作用。

是因为输出不是静态的还是其他原因?

这是我正在使用的命令:

echo"$(prstat -a)"

2 个答案:

答案 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将其撤消即可。您可以直接运行它。