我有一个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
添加到语句的末尾,但这也不起作用。基本上,我试图隐藏命令但不是输出。
答案 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