我意识到 SE 上还有其他几个关于后台任务完成后的通知的问题,以及如何排队作业在其他作业结束后开始,以及类似 these 的问题。 ,但我正在寻找更简单问题的更简单答案。
我想开始一个非常简单的后台作业,并获得一个简单的标准输出文本通知它完成。
例如:
cp My_Huge_File.txt New_directory &
...完成后,我的 bash shell 会显示一条消息。此消息可能只是已完成作业的 PID,但如果我可以为每个后台进程编写唯一的消息,那也很酷,这样我就可以在不混淆的情况下运行多个后台作业。
感谢您的任何建议!
最佳答案
编辑:user000001 的回答用 ;
分隔命令。我在原始示例中使用 &&
分隔命令。我注意到的唯一区别是,如果您使用 &&
,则不必用大括号将 base 命令括起来。分号更灵活一些,因此我更新了示例。
首先想到的是
{ sleep 2; echo " sleep 了"; } &
您还可以抑制上述行中伴随的 stderr
输出:
{ { sleep 2; echo " sleep 了"; } & } 2>/dev/null
如果您想将程序输出 (stdout
) 保存到日志文件以供日后查看,您可以使用:
{ { sleep 2; echo "Sleep done"; } & } 2>/dev/null 1>myfile.log
这里甚至还有一个您可能会使用的通用表单(您甚至可以创建一个别名,这样您就可以随时运行它而无需输入太多内容!):
# dont hesitate to add semicolons for multiple commands
CMD="cp My_Huge_File.txt New_directory"
{ eval $CMD & } 2>/dev/null 1>myfile.log
如果您希望使用其他脚本或软件实时处理输出,您也可以使用 |
将 stdout
通过管道传输到另一个进程。如果您希望使用多个管道,tee
也是一个有用的工具。作为引用,还有更多 I/O 重定向的例子 here .
关于bash - 后台进程完成后如何获取标准输出消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536619/