2016-06-17 27 views
0

私は、ファイルを別々に書くスクリプトを持っています(名前は引数として渡されます)。私は警告がある場合、このスクリプトを失敗させたいです。Linuxデバイスで書き込みが許可されていない

誰かが書き込もうとすると、エラーが発生するファイル名を渡す必要があります。 多かれ少なかれ慣用名を使用したい(スクリプトのマニュアルページに含める)。だから、

、私のスクリプトは

# myScript.sh 
echo "Hello" > $1 

私はそれが失敗していない

./myScript.sh /dev/stdin 

でそれを呼び出す場合は/ dev/stdinを読み取り専用にされていないため、デバイス(驚くほど!) あるとしましょう後で

私がそれを望むように失敗しました(/はディレクトリなので書き込めません) 。しかし、それは慣用的ではありません。

これを行うにはかなりの方法がありますか?

+2

man bash '-w file: ファイルが存在し、書き込み可能な場合はTrueを返します。 ' – 123

+0

いいえ、私は読書専用のデバイスまたはファイル名が必要です!/dev/nullのようなものですが、読み取り専用です:) –

答えて

1
if [ -w "$1" ] 
then 
    echo "$Hello" > "$1" # Mind the double-quotes 
fi 

はあなたが探しているものです。 1つの引数が の場合には、以下の方が良いでしょう。

if [ -w "$*" ] 
then 
    echo "$Hello" > "$*" # Mind the double-quotes 
fi 

$*は、非標準のファイル名に対応するために使用されます。 "$*"は、複数の引数を1つの単語に結合します。 [ this ]を確認してください。

+1

?私はどのようにして「$ *」が「より良い」ものになるかを見ていません。ユーザーが複数のファイルを渡した場合、対処方法は 'for $ in"です。 [-w "$ f"]とするとします。 '等 – tripleee

+0

@トライプルー:ユーザーはここで質問で確認された一つの議論しかありません。そうでなければあなたと完全に一致します。 – sjsam

関連する問題