如何防止'&'和'>'运算符的输出(发送到后台运算符和重定向运算符)

如何防止'&'和'>'运算符的输出(发送到后台运算符和重定向运算符)

我尝试过 、 、 的各种组合gedit&>/dev/null 2>/dev/nullgedit其他两个一起使用时,它总会在终端上打印一些内容。

终端中的 gedit

我知道这些数字是 pid。但是,请解释以下

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

答案1

$ sleep 10 &
[1] 24446
$ 
[1]+  Done                    sleep 10

[1] 24446[1]+ Done ...shell 打印。来自man bash

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

      [1] 25647

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

set +m

但是,您无法在交互式 shell 中禁用第一种形式。相反,请尝试在子 shell 中运行:

$ (gedit &> /dev/null &)
$ 

如果使用此功能,后台进程将不再受 shell 的作业控制。

附注:&>可以用于将 stdout 和 stderr 一起重定向。

相关内容