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

时间:2011-12-08 14:53:21

标签: bash shell command-line autocomplete tab-completion

我经常从shell(在我的情况下是Bash)执行命令,我想立即分叉并且我想忽略它的输出。事实上我经常创建一个脚本(silent)来执行它:

#!/bin/bash
$@ &> /dev/null &
然后我可以跑,例如

silent inkscape myfile.svg

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

我有两个问题:

  1. 是否采用“官方”方式执行此操作?即更短但相当于&> /dev/null &

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

4 个答案:

答案 0 :(得分:4)

除了:可能希望在exec "$@" &> /dev/null &脚本中使用silent,以使其放弃子shell,并且"$@"周围的引号将阻止空格妨碍。

至于#2:complete -F _command silent应该做你想要的事情。 (我在我的launch中调用我的脚本版本complete -F launch.bash_profile

答案 1 :(得分:3)

看起来nohup或多或少会做你想要的。 tab-completion问题是因为bash认为你试图完成一个文件名作为脚本的参数,而它的完成规则知道nohup将一个命令作为它的第一个参数。

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

答案 2 :(得分:2)

这是我用来启动交互式(和聊天)X应用程序的一个小脚本。一个xterm

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

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

如果您不希望日志只使用/ dev / null。

如果你是脚本过敏的话,也可以使用函数。

答案 3 :(得分:0)

也许你可以“重新绑定”标签键?显示带有回车键的超级用户Stackoverflow上的example。这是正确的想法吗?