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

Bash 只需将命令的输出分叉并重定向到/dev/null即可,bash,shell,command-line,autocomplete,tab-completion,Bash,Shell,Command Line,Autocomplete,Tab Completion,我经常从一个shell(在我的例子中是Bash)执行我想要立即分叉的命令,并且我想要忽略它的输出。事实上,我经常创建一个脚本(silent)来执行此操作: #!/bin/bash $@ &> /dev/null & 然后我就可以跑步了 silent inkscape myfile.svg 而且我的终端不会被我刚刚分叉的进程的调试输出所污染 我有两个问题: 是否有一种“官方”的方法来实现这一点?即更短但等同于&>/dev/null& 如果没有,是否有一种方法可以使选项卡完

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

#!/bin/bash
$@ &> /dev/null &
然后我就可以跑步了

silent inkscape myfile.svg
而且我的终端不会被我刚刚分叉的进程的调试输出所污染

我有两个问题:

  • 是否有一种“官方”的方法来实现这一点?即更短但等同于
    &>/dev/null&

  • 如果没有,是否有一种方法可以使选项卡完成在执行
    静默命令后工作,就好像它不在那里一样?举个例子,在我键入
    silent-inksc
    之后,我希望bash在我按下
    [tab]
    时自动完成对
    silent-inkscape
    的命令


  • 也许你可以“重新绑定”tab键?此时会显示带有enter键的on superuser Stackoverflow。这是正确的想法吗?

    旁白:可能想在
    静默的
    脚本中执行“$@”和>/dev/null&
    ,以使其放弃子shell,
    “$@”
    周围的引号将防止空格碍事


    至于#2:
    complete-F#u命令silent
    应该做一些您想要做的事情。(我称我的脚本版本为
    launch
    ,并在我的
    .bash_profile
    中有
    complete-F launch

    以下是一个小脚本,我用于从xterm启动交互式(和聊天)X应用程序

    #!/bin/bash
    exe="$1"
    shift
    "$exe" "$@" 2>/tmp/$$."$exe".err 1>&2 & disown $!
    
    没有输出,如果终端退出,则不会死掉,但如果出现问题,/tmp中会记录所有输出

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


    如果您使用的是脚本alergic,那么它也可以从函数中工作。

    看起来nohup或多或少做了您想要的事情。制表符完成问题是因为bash认为您正在尝试完成一个文件名作为脚本的参数,而它的完成规则知道nohup将命令作为其第一个参数


    Nohup将stout和stderr重定向到Nohup.out,并且在shell退出时也将使命令保持运行。

    您写道“好像它不在那里”。对不起,“它”是什么?也许你可以编辑你的帖子来澄清。祝你好运。这意味着让bash将
    silent
    的参数当作一个普通命令来处理,该命令可以使用普通的制表符完成。因此,
    silent git pus[TAB]
    将完成
    silent git push
    。我澄清了第二个问题,谢谢你的提问。git示例可能更好,因为它表明我希望bash在这种情况下使用git完成配置文件;据我所知,它不会自动分叉进程。不会,但如果需要在后台运行进程,可以使用“nohup command&”。