2016-06-22 6 views
0

私は、その後、私は、ファイルエラーがシェルスクリプトの変数に格納されていませんか?

で変数の結果をエコー時にはファイルが存在しないと、このエラーが発生したときに、私は、しかしstat: cannot stat xxxx

としてエラーを取得するコマンド

store=`stat /some/path` 
echo ${store}>>file.txt 

を持っていますそれは私の変数に格納されているよりもstdoutにエコーされます。私もエラーを印刷して欲しいです。同じように私はどのようにキャプチャできますか?

+1

コードには複数の問題があります。私はおそらくhttp://shellcheck.netを使用することを示唆し、いくつかのヒントを得るかもしれません... –

+0

実際にはstdoutには、いいえ - あなたのファイルではなく、* stderr *に行きます。 –

+0

ところで、あなたは 'store = $(stat/some/path);で何を達成していますか? 'stat/some/path >> file.txt'で達成できなかったecho $ {store} >> file.txt'(stderrもリダイレクトしたい場合は' 2>&1'を使用します) –

答えて

1

あなたはしません。

あなたは私が意味するエラーメッセージを「キャプチャ」しません。ファイルがを存在する場合はその代わりに、このすべてをやって前にチェック:

my_path="/some/path" 
if [ -f "$my_path" ]; then 
    stat "$my_path" >> file.txt 
fi 

ここでレース状態があることに留意すべきである

チェックとstatの間に除去することができたファイルは、コマンド。それが起こる可能性は小さいですが、それでも起こる可能性があります。

+1

より多くの引用符が必要です。そしてOPがstderrをファイルにリダイレクトしたいのであれば(記述ごとに、そのファイルが人間のレビューのように聞こえる)、どうしてそんなことを教えてみませんか? –

+2

また、すべて大文字の変数名が不適切な形式であることを示唆しています。 http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.htmlを参照してください。その名前空間は、シェルやオペレーティングシステムにとって意味のある変数のために予約されています。シェル変数が同じ名前の環境変数を上書きするため、アプリケーション定義名には、潜在的な競合を避けるために、少なくとも1つのアルファベットの小文字が必要です。 –

+1

... re: "more quotes" - '[-f" $ my_path "]'、 'stat" $ my_path "' - スペースやグロブを含むファイル名の場合は、 'test'(前者の場合)または' stat'(後者)に渡されます。 –

関連する問題