如何防止“&”和“>”操作符的输出(发送到后台操作符和重定向操作符)

MAK*_*AKZ 6 command-line bash

我尝试了gedit, &, 的各种组合>/dev/null 2>/dev/null。当gedit与其他两个一起使用时,它总是向终端打印一些东西。

终端中的 gedit

我知道这些数字是pid的。但是,请说明以下内容

  • 为什么当我将 stdout 和 stderr 重定向到 /dev/null 时会产生这些输出,而baregedit不打印任何内容?
  • 什么[1]+ Done意思?
  • 如何防止这些输出?

mur*_*uru 8

$ sleep 10 &
[1] 24446
$ 
[1]+  Done                    sleep 10
Run Code Online (Sandbox Code Playgroud)

[1] 24446[1]+ Done ...由外壳印刷。来自man bash

When  bash starts a job asynchronously (in the background), it prints a
line that looks like:

      [1] 25647
Run Code Online (Sandbox Code Playgroud)

您可以Done通过禁用监视器模式来禁用输出:

set +m
Run Code Online (Sandbox Code Playgroud)

但是,您不能在交互式 shell 中禁用第一个表单。相反,尝试在子shell中运行:

$ (gedit &> /dev/null &)
$ 
Run Code Online (Sandbox Code Playgroud)

如果你使用它,后台进程不再受 shell 的作业控制。

一个旁注,&>可用于将 stdout 和 stderr 一起重定向。