2010-12-07 15 views
4

私はディレクトリに関するいくつかの異なる情報を計算するスクリプトを作成しています。私はファイルを作成するオプションをユーザーに与えなければなりません。多くの異なるファイルチェックが行われますが、特に私には悲しみが与えられています。bashでファイルを作成すると、作成できない場合に2>/dev/nullをどのように活用すればよいですか?

ファイル名がチェックされていて存在しない場合は、スクリプトが作成しようとしています。作成が失敗した場合は、作成できなかったことをユーザーに通知する必要があります。

私は、ユーザーが作成したいファイルに与えた名前である変数(ファイル)を持っています。私は次に使用します:

echo -n "Creating the file: '$file'" 
touch "$file" 
if [ -e "$file" ]; then 
    echo "..........File created" 
    else echo"...........Creation failed" 
fi 

> 2/dev/nullはタッチラインの後にはありますか?エラーメッセージを表示しないようにする適切な構文は何ですか?ファイルの作成:(ファイル).........作成に失敗しましたか?

本当にありがとうございました

答えて

3

あなたは、標準エラー出力をリダイレクトする2>ない>2を使用する必要があります。

は、ファイルが存在するが、あなたはそれに触れるする権限を持っていないので、touchに障害が発生したと仮定します。

touch "$file" 2> /dev/null 

しかし、たとえこれがあなたのスクリプトを変更して

にはバグがあります。次に、 trueを返す -eチェックを使用してファイルが存在するかどうかをチェックし、 File createdが正しくないことを確認します。あなたが実際にしたい

if touch "$file" 2> /dev/null ; then 
echo "..........File created" 
else 
echo "..........File failed" 
+0

は畜生、とあなたはtouchコマンドの戻り値をチェックする必要があり、この問題を解決するには

私は>後にスペースを逃していた。どのような骨頭。新鮮なおかげでありがとう – unit

+0

"$ file"(スペース)2>(スペース(andnospace))/ dev/nullをタッチして試してみたところ、まだエラーメッセージが表示されます – unit

+0

それがキック!どうもありがとうございます! – unit

0

touch "$file" 2> /dev/null 

(むしろ>2より2>に注意してください)

+0

私は他のポスター(冗長であると申し訳ありません)に対する回答として、この方法で試してみましたが、画面にエラーが表示されています。 "ファイル名を作成: '(ファイル名)' touch: (ファイル名) ':許可が拒否されました ........失敗しました – unit

+0

ユニット、結果を複製できません(例:/ bin/bash 2>/dev/nullをタッチすると出力が生成されません) –

+0

@unit:あなたの*正確な*コードを投稿してください - あなたはおそらくタイプミスまたは他の些細な問題があります... –

関連する問題