bash - 后台进程完成后如何获取标准输出消息?

标签 bash unix background stdout

我意识到 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/

相关文章:

bash - 如何修复 "Failed to execute child process source (no such file or directory)"

bash - 如何替换 Bash 中上一个命令中字符串的所有实例?

c - 在 c unix 编程中,只允许在一个进程中使用 open() 打开文件

java - 小程序背景闪烁?

bash - Jupyter/iPython Notebook 的根访问权限

linux - 从脚本内部确定解释器

unix - Apache Drill 普通身份验证抛出无效的用户名/密码错误

c++ - 关于让 inotify 线程休眠

android - 方法setImageDrawable/setBackgroundDrawable图像大小问题

image - 我如何使用 Canvas 绘制这个背景形状?