人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

cronの質問です。
/dev/null 2&>1 と /dev/null 2>&1の違いはなんでしょうか?

●質問者: yo-jiro-11
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ghost
●23ポイント

cron は関係なく、POSIX shell での redirect。

おそらく /dev/null の前にも > があったかと。

http://www.gnu.org/software/bash/manual/bashref.html#Redirection...

&> は bash の独自拡張で、本来は >& とは別の意味ですが >& としても使えます。

>& は POSIX 的に標準なので shell が bash でない環境でもたいてい使えます。

で結局、bash での &>/dev/null は、標準的な >/dev/null 2>&1 と同義です。


2 ● Mook
●45ポイント
/dev/null 2&>1

という書き方は通常のシェルではないと思うのですが、期待通りに動くのでしょうか?

リダイレクトでは ">&" で一つのオペレーションですので、"&>" は、

"&"(バックグラウンド実行)と">"(リダイレクト)として解釈されると思いますが、

その前に /dev/null が付くのはおかしな気がします。


下記のサイトは詳細に説明しているので、ご一読をお勧めします。

http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A...


3 ● a-kuma3
●60ポイント ベストアンサー

まず、比較をするなら、

コマンド >/dev/null 2&>1 と コマンド >/dev/null 2>&1 の違いになります。


まず、書き方が正しい後者から。

>/dev/null は、コマンドの標準出力を、実体が無いファイルに吐き出す、という意味です。

2>&1 は、標準エラー出力の出し先を、標準出力と同じ所に吐き出す、という意味です。

この二つを書くことで、標準出力と、標準エラー出力が、どこにも出力されない (破棄される)、ということになります。


cron は、端末を持たない環境で実行されるので、端末に吐き出されるべき出力があると、

実行者にメールで通知されます。

ただ、「正常に動作しました」なんてメールをもらっても、うれしくない、というか、邪魔なだけなので、

先のような書き方をして、出力を捨てます。


後者は、以下の書き方と同じ意味になります。

コマンド 2 & >/dev/null >1

コマンドに "2" というパラメータを与えて、別プロセスで実行し、標準出力を捨てる。

標準出力の出し先を変える指定が二つあるので、二番目の >1 は、サイズ 0 のファイル名が "1" というファイルが作られるだけです。


要は、似ている書き方だけで、& と >& が全然違う意味を持っているということです。


cron の質問というよりは、cron がコマンド行を実行するために使っている sh の話になります。

man sh の、「リダイレクト」というあたりを読むと、少し、幸せになれるかも、です。


4 ● toki-2131
●0ポイント

特に何も違いはないけど


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ