【问题标题】:General function for suppressing output into bash -- spaced filenames抑制输出到 bash 的通用函数——间隔文件名
【发布时间】:2013-10-01 08:51:35
【问题描述】:

我想编写 bash 函数来抑制输出到 bash 中的命令行。

我在 $HOME/.bashrc 中包含以下内容

# suspend output to the terminal
noout(){
        $* &>/dev/null &
}

例如,我为 evince 创建了别名:

alias evince='noout evince'

这适用于文件名中没有空格的文件。但是,如果我启动类似:

evince Jack\ London\ -\ The\ Star\ Rover.pdf

Bash 将文件名分成几位,并且 evince 会打开几个空窗口。

感谢您为其提供的任何帮助。

【问题讨论】:

  • 如果用evince "Jack London ..." 调用它会怎样?也就是说,将参数放在双引号内?
  • 使用双引号的结果是一样的:它打开了几个空窗口。

标签: bash output


【解决方案1】:

试试这个:

noout() {
    "$@" >/dev/null 2>&1 &
}

我不确定您为什么要在后台执行此操作,但这是您的选择。我的答案的相关方面是引用和使用$@ 而不是$*。另见what does "$@" mean in a shell script

【讨论】:

  • 行得通!谢谢。我更喜欢在后台运行它以使终端立即可用于其他命令。
  • 是的,当然,我的意思是:你为什么要混合抑制输出并将其发送到后台?使用您的解决方案,您无法在 将其发送到后台的情况下抑制输出(例如,从通常应该等到其他进程完成的脚本启动它)。如果没有noout 中的&,您始终可以在别名或命令行中附加&(如果您碰巧直接使用noout)。
  • 这是一个很好的评论。我还没有考虑在脚本中使用它。我现在创建了一个新函数background(){"$@" &},并将别名更改为alias evince='background noout evince'
  • 告诉我这是个笑话 ;-)
  • 请注意,noout 仅适用于非常简单的命令:没有管道、没有重定向、没有其他 shell 语法,只有一个简单的命令名称及其参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 2013-03-20
  • 2010-10-03
  • 1970-01-01
  • 2015-05-07
相关资源
最近更新 更多