2016-06-17 2 views
0

Ich habe ein Skript, das einige Warnungen in separate Datei schreiben (es ist Name als Argument übergeben). Ich möchte dieses Skript fehlschlagen lassen, wenn es eine Warnung gibt.Linux-Gerät, die nicht erlauben, darauf zu schreiben

Also, ich muss einen Dateinamen übergeben, der einen Fehler auslösen muss, wenn jemand versucht, dort zu schreiben. Ich möchte einen mehr oder weniger idiomatischen Namen verwenden (um ihn in die man-Seite meines Skripts aufzunehmen).

Also, lassen Sie sagen, mein Skript

# myScript.sh 
echo "Hello" > $1 

ist, wenn ich es mit

./myScript.sh /dev/stdin 

nennen es nicht scheitern, weil/dev/stdin ist nicht schreibgeschützt Gerät (überraschend!) Nach

es ist fehlgeschlagen, wie ich es will (weil/ist ein Verzeichnis, Sie können nicht dort schreiben) . Aber ist nicht idiomatisch.

Gibt es einen schönen Weg, es zu tun?

+2

Von Mann Bash '-w Datei: True, wenn die Datei existiert und beschreibbar ist. – 123

+0

Nein, ich brauche idiomatische schreibgeschützte Gerät oder Dateiname! Etwas wie/dev/null, aber schreibgeschützt :) –

Antwort

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

ist, was Sie suchen. Unten wäre sogar besser, wenn Sie nur ein Argument haben.

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

$* wird verwendet, Nicht-Standard-Dateinamen aufzunehmen. "$*" kombiniert mehrere Argumente in einem einzigen Wort. Überprüfen Sie [ this ].

+1

Huh? Ich sehe nicht, wie "$ *" in irgendeiner Weise "besser" wäre. Wenn der Benutzer mehrere Dateien übergibt, ist der Weg zu bewältigen "für f in" $ @ "; tue wenn [-w "$ f"]; 'etc. – tripleee

+0

@tripleee: Der Benutzer hat hier nur ein Argument, wie in der Frage bestätigt .. Ansonsten vollkommen in Übereinstimmung mit Ihnen .. – sjsam

Verwandte Themen