UNIXのシェルスクリプト上で、

mkdir -p /a/b > /dev/null ①
という記述を見るのですが、 > /dev/null
している理由が分かりません。
何か標準出力を捨ててるのは分かりますが、
mkdir -p で標準出力が出るとは思えないので、
普通に
mkdir -p /a/b ②
で問題ない気がするのです。

・②と比較して①のメリットは
 何かあるのでしょうか?
・①、②の使い分けはあるのでしょうか?
・(できれば)参考にするサイトは
 あるでしょうか?

回答の条件
  • 1人3回まで
  • 登録:2006/06/17 17:51:52
  • 終了:2006/06/18 00:04:23

回答(2件)

id:kurukuru-neko No.1

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/06/17 21:56:12

ポイント35pt

私ならこうしますが( bash )

mkdir -p /a/b >>/dev/null 2>&1

RC=$?

> mkdir -p で標準出力が出るとは思えないので、

mkdirで標準出力に何も出力されないと思うのは

希望的観測なので、確実に出したくないのでしょう。

作成前のエラー (mkdirが実行できない又は存在しない,

違うmkdir)

/aの作成段階のエラー (権限がない)

/a/bの作成段階のエラー(権限がない,bがファイル)

/a参照段階エラー (権限がない)

/a/b参照段階エラー(権限がない,bがファイル)

id:eimu

なるほど、作成権限がない時に、エラーが出る

ケースがあるのですね。

ちなみに自分の環境は、cshとshしかなく、

bashは使えないので、> /dev/null

なのでしょうね。

あと、できれば

>>の部分と(なぜ > でないか)

RC=$?の部分、

shかcshで標準出力と標準エラー出力

両方を/dev/nullに持っていく方法を

教えてもらえると助かります。

2006/06/17 22:54:23
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/06/17 23:20:26

ポイント35pt

sh/bashでは

mkdir -p /a/b >>/dev/null 2>&1

RC=$?

cshでは、

mkdir -p /a/b >&! /dev/null

set RC=$?

RC=$?は、エラーを判断するようなコードを

その後で書く必要があるので変数RCに戻り値を保存している。

http://homepage2.nifty.com/freeline/bash_vs_csh.html

==========================================

> >>/dev/null 2>&1

なぜ >>なのか?

>でも問題がありませんが。 用心の為です。

 以前root権限を持つ不届きなプログラムが /dev/null

 ファイルを消してくれたりした事があり

 それ以降>>にしています。

>だと新規に作成されるので犯人探しの手がかりが

 少なくなるので。

>>であれば実行されているプログラムが途中で

 何か出力を捨てる目的で使っている事があり

 犯人探しの手がかりになるので。

id:eimu

よく分かりました、どうもありがとう

ございます。

>/dev/null 2>&1 の様な記述も

時々見るのですが、分からなかったので

助かりました。

記号も検索エンジンで探せると

もう少し簡単に答えが分かるのですがね。。。

2006/06/18 00:02:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません