缩短或合并多行 `&> /dev/null &`

缩短或合并多行 `&> /dev/null &`

每次启动机器时,我都会运行以下程序:

$ cat start.sh
#! /bin/bash
google-chrome &> /dev/null &
lantern &> /dev/null &
xdg-open . &> /dev/null &
emacs &> /dev/null  &
code ~/Programs/ &> /dev/null &
xdg-open ~/Reference/topic_regex.md &> /dev/null &

繁琐&> /dev/null &...如何才能缩短逻辑?

答案1

该部分&> /dev/null表示输出重定向。你可以将多个命令分组为一个块,以将它们重定向到同一个文件:

#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs  &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null

但是,不能使用相同的命令在后台启动单个命令(&)。放在&块后面意味着将整个块作为单个脚本在后台运行。

答案2

我编写了一个函数并将其放入我的终端中.bashrc,以运行与我的终端分离的东西:

detach () 
{ 
    ( "$@" &> /dev/null & )
}

... 进而:

detach google-chrome
detach xdg-open ~/Reference/topic_regex.md

因为我很懒,所以我还写了一个快捷方式xdg-open

xo () 
{ 
    for var in "$@"; do
        detach xdg-open "$var";
    done
}

因为xdg-open只需要一个参数,所以该函数xo会遍历所有给定的参数并xdg-open分别调用每个参数。

这样可以:

detach google-chrome
xo . ~/Reference/topic_regex.md

答案3

您可以使用以下方式重定向所有后续命令的输出

exec 1>/dev/null
exec 2>/dev/null

答案4

我创建了一个特殊的文件,其/dev/null路径较短,以缩短重定向。我将其用作/n新文件的路径:

sudo mknod -m 0666 /n c 1 3

这样,您可以将各行缩短为例如:

google-chrome &>/n &

来源:如何创建 /dev/null?

相关内容