使用cmd启动后台进程时显示命令&

时间:2018-08-09 19:39:13

标签: bash shell command environment-variables background-process

我可以这样启动后台进程:

>user@host ~ $ sleep 2m &
>[1] 123456

在启动后台作业后立即显示作业编号和pid [1] 123456

开始工作后,我可以使用jobs -l检查其状态。

>user@host ~ $ jobs -l
>[1] 123456 Running sleep 2m &

当我这样启动后台进程时,我希望看到jobs -l的完整输出:

>user@host ~ $ sleep 2m &
>[1] 123456 Running sleep 2m &

我也只喜欢这样的命令:

>user@host ~ $ sleep 2m &
>[1] 123456 sleep 2m &

我在手册页中查找了一些环境变量,该变量控制显示的内容,但尚未找到它。这可能吗?如果可以,怎么办?

2 个答案:

答案 0 :(得分:0)

您可以定义一个函数,该函数先打印命令,然后在后台执行它。

mybg() {
    echo "Backgrounding: $@"
    eval "$@ &"
}

那么您可以做:

mybg sleep 60

答案 1 :(得分:0)

您可以通过使用group命令启动后台执行并重定向group命令的stderr来禁止显示初始[1] 123456。您可以紧随其后的是jobs -l %,以打印出所需的关于在后台放置的最后一条命令的输出。

{ sleep 2m &} 2>/dev/null; jobs -l %

如果您关心正在运行的作业的标准错误,则可以这样扩展:

{ sleep 2m 2>&3 &} 3>&2 2>/dev/null; jobs -l %

[技术来自this答案]