只需分叉并将命令的输出重定向到 /dev/null



我经常从 shell(在我的例子中是 Bash(命令执行,我想立即分叉并且我想忽略其输出。事实上,我经常创建一个脚本(silent(来做到这一点:

#!/bin/bash
$@ &> /dev/null &

然后我可以跑,例如

silent inkscape myfile.svg

并且我的终端不会被我刚刚分叉的进程的调试输出污染。

我有两个问题:

  1. 有没有一种"官方"的方式来做到这一点?,即更短但等同于&> /dev/null &

  2. 如果没有,有没有办法让我在silent命令之后进行制表完成工作,就好像它不存在一样?举个例子,在我输入 silent inksc 后,我想 bash 自动完成我的命令,当我按 [tab]silent inkscape

旁白:可能想在你的silent脚本中exec "$@" &> /dev/null &,让它丢弃子shell,"$@"周围的引号将防止空格妨碍。

至于#2:complete -F _command silent应该做一些你想做的事情。(我称该脚本的版本为launch,并在.bash_profilecomplete -F launch(

看起来nohup或多或少可以满足您的需求。制表符补全问题是因为 bash 认为您正在尝试完成文件名作为脚本的参数,而其完成规则知道 nohup 将命令作为其第一个参数。

Nohup 将 stout 和 stderr 重定向到 nohup.out,并且如果您的 shell 退出,该命令也会保持运行。

这是我用来启动交互式(和聊天(X 应用程序的小脚本,例如 xterm

#!/bin/bash
exe="$1"
shift
"$exe" "$@" 2>/tmp/$$."$exe".err 1>&2 & disown $!

没有输出,如果终端退出不会死,但如果出现问题,/tmp 中会记录所有输出

如果您不想要日志,只需使用/dev/null 即可。

如果你是脚本过敏,也可以从一个函数工作。

也许您可以"重新绑定"Tab 键?显示了使用回车键的超级用户 Stackoverflow 的示例。这是正确的想法吗?

最新更新