我写了这个小脚本:
response=$(process ...) | zenity --progress --pulsate
echo $response
我想读取进程的响应(无论它是什么),同时显示一个脉动的进度条。问题是我在最后没有读取任何响应。我想是因为上一个进程的所有输出都发送到了 zenity。
答案1
嗯,不,这是错的。你给变量赋值$response
,然后管道这项作业zenity。尝试
process | tee /tmp/response.txt | zenity --progress --pulsate --auto-close
response=$( cat /tmp/response.txt )
这样,输出将存储在文件中/tmp/response.txt
,您稍后可以将其读入变量中。
答案2
我遇到了同样的问题并且不想创建临时文件,所以我的解决方案是:
#!/bin/bash
FIFO=$(mktemp -u)
mkfifo $FIFO
(cat $FIFO | zenity --progress --pulsate --auto-close) &
response=$(process)
echo 'Bye bye' > $FIFO
rm -f $FIFO