Bash - 隐藏命令但不隐藏其输出

时间:2015-03-12 15:40:13

标签: bash tcl expect

我有一个bash脚本(this_script.sh),它调用另一个TCL脚本的多个实例。

set -m
for vars in $( cat vars.txt );
do
   exec tclsh8.5 the_script.tcl "$vars" &
done
while [ 1 ]; do fg 2> /dev/null; [ $? == 1 ] && break; done

多线程部分取自Aleksandr的答案:Forking / Multi-Threaded Processes | Bash。 该脚本完美运行(仍试图弄清楚最后一行)。但是,此行始终显示为exec tclsh8.5 the_script.tcl "$vars"

如何隐藏该行?我尝试将脚本运行为:

bash this_script.sh > /dev/null

但是这也隐藏了调用的tcl脚本的输出(我需要TCL脚本的输出)。 我尝试在for语句中将/dev/null添加到语句的末尾,但这也不起作用。基本上,我试图隐藏命令但不是输出。

1 个答案:

答案 0 :(得分:1)

您应该使用$!来获取刚开始的后台进程的PID,将其累积到变量中,然后在第二个wait循环中依次为for中的每个进行累积

set -m
pids=""
for vars in $( cat vars.txt ); do
   tclsh8.5 the_script.tcl "$vars" &
   pids="$pids $!"
done
for pid in $pids; do
   wait $pid
   # Ought to look at $? for failures, but there's no point in not reaping them all
done