每次启动机器时,我都会运行以下程序:
$ 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 &