`&> /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
}

正確に 1 つの引数を期待するため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 を作成するにはどうすればいいですか?

関連情報