gpt4 book ai didi

bash - 在 bash 中完成后台作业时通知

转载 作者:行者123 更新时间:2023-11-29 09:32:22 25 4
gpt4 key购买 nike

我正在运行一些耗时的可执行文件,这些文件在循环中分配了不同的参数作为并行后台作业。这是一个玩具示例及其输出:

bash-3.2$ set -o notify
bash-3.2$ for (( i=0 ; i < 4 ; i+=2 )); do
> sleep ${i} &
> done
[1] 32394
[2] 32395
bash-3.2$ [1]- Done sleep ${i}
[2]+ Done sleep ${i}

请注意,当每个作业完成运行时,它会通知我。在完成消息中会显示作业的命令,但参数未展开的方式,因此无法通过查看消息明显地知道它使用的参数值。我希望消息是这样的

bash-3.2$ [1]-  Done                    sleep 0
[2]+ Done sleep 2

有可能吗?

谢谢和问候!

最佳答案

不是很漂亮:

for (( i=0 ; i < 4 ; i+=2 )); do
sleep ${i} && echo -en "\nsleep ${i} "&
done

输出如下:

[1] 29311
[2] 29313

sleep 0 [1]- Done sleep ${i} && echo -en "\nsleep ${i} "
user@host:~$
sleep 2 [2]+ Done sleep ${i} && echo -en "\nsleep ${i} "

一个函数可以把它整理一下:

myeval () {
eval "$*" && echo -en "\n$* "
}

然后你可以这样做:

for (( i=0 ; i < 4 ; i+=2 )); do
myeval "sleep ${i}"&
done

输出如下:

[1] 29635
[2] 29636

sleep 0 [1]- Done myeval "sleep ${i}"
user@host:~$
sleep 2 [2]+ Done myeval "sleep ${i}"

关于bash - 在 bash 中完成后台作业时通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1369522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com