マシンを起動するたびに、次のプログラムを実行します。
$ 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 &