Abs*_*cDo 15 command-line bash redirect background-process
每次启动机器时,我都运行以下程序:
$ 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 &
Run Code Online (Sandbox Code Playgroud)
繁琐&> /dev/null &......我怎么能缩短逻辑?
Mel*_*ius 16
该部分&> /dev/null表示输出重定向。您可以通过将多个命令分组到一个块中来将多个命令重定向到同一个文件:
#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null
Run Code Online (Sandbox Code Playgroud)
但是,同样的东西不能用于在后台启动单个命令 ( &)。放在&块之后意味着在后台将整个块作为单个脚本运行。
Per*_*uck 14
我编写了一个函数并将其放入.bashrc我的终端中以运行与我的终端分离的东西:
detach ()
{
( "$@" &> /dev/null & )
}
Run Code Online (Sandbox Code Playgroud)
... 进而:
detach google-chrome
detach xdg-open ~/Reference/topic_regex.md
Run Code Online (Sandbox Code Playgroud)
而且因为我很懒,我还写了一个快捷方式xdg-open:
xo ()
{
for var in "$@"; do
detach xdg-open "$var";
done
}
Run Code Online (Sandbox Code Playgroud)
因为只xdg-open需要一个参数,该函数xo会遍历所有给定的参数并分别调用xdg-open每个参数。
这允许:
detach google-chrome
xo . ~/Reference/topic_regex.md
Run Code Online (Sandbox Code Playgroud)