`&> / dev / null&`の複数行を短縮またはマージします


11

マシンを起動するたびに、次のプログラムを実行します。

$ 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 &...どうすればロジックを短縮できますか?



素晴らしい、素晴らしいアプリケーション。通常、gnome-sessionでエラーが発生して突然クラッシュするため、tmuxサーバーから起動します。@DennisWilliamson
微積分

回答:


12

この部分&> /dev/nullは、出力のリダイレクトを意味します。ブロックにグループ化することにより、複数のコマンドを同じファイルにリダイレクトできます。

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

ただし、同じことを使用してバックグラウンドで個々のコマンドを開始することはできません(&)。&ブロックの後に置くとは、バックグラウンドでブロック全体を単一のスクリプトとして実行することを意味します。


&>構文は廃止予定であり、>/dev/null 2>&1 wiki-dev.bash-hackers.org / scripting / obsolete
multithr3at3d

4
@ multithr3at3d POSIXと互換性のないBashism?承知しました!非推奨または廃止されましたか?いいえ、このリストの3人の著者が2015年に最後に編集した内容に関係なく。これは短い形式であり、コマンドラインの短縮がまさにここでのOPの目標です。#!/bin/bash移植性を最初に確認せずに別のシェルでスクリプトを実行する場合、Bashが機能しないのは間違いではありません。
デザート

12

私は、関数を作成し、それを.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引数は1つだけであるため、関数は指定さxoれたすべての引数を反復処理しxdg-open、それぞれの引数を個別に呼び出します。

これにより以下が可能になります。

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

5

後続のすべてのコマンドの出力をリダイレクトできます

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

3

ループを作成し、引数としてコマンドを与えることができます:

for i in google-chrome "xdg-open ." "code ~/Programs/"; do
  $i &
done &>/dev/null

この方法は、中括弧を使用したサブシェルアプローチとまったく同じように、出力を合計して一度にすべてをリダイレクトできることに注意してください。


3

/dev/nullリダイレクトを短縮するために、短いパスのような特別なファイルを作成しました。/n新しいファイルのパスとして使用しました:

sudo mknod -m 0666 /n c 1 3

これにより、個々の行を次のように短縮できます。

google-chrome &>/n &

ソース:/ dev / nullの作成方法

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.