Hoffe, es ist in Ordnung, dies zu bemerken, jetzt, wo ich darauf gestoßen bin:
Mir ist bereits bekannt, dass man die Existenz von Dateien mit dem Befehl test
( [
) testen kann :
$ touch exists.file
$ if [ -f exists.file ] ; then echo "yes" ; else echo "no" ; fi
yes
$ if [ -f noexists.file ] ; then echo "yes" ; else echo "no" ; fi
no
... aber das ist ein bisschen von dort tippen :)
Also habe ich gewandert, wenn es einen "Standard" -Befehl gibt, der das Ergebnis der Dateiexistenz zurückgibt stdout
?
Ich kann auch test
mit dem Exit-Status verwenden $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... aber das sind immer noch zwei Befehle - und die Logik ist auch "invers" (0 für Erfolg und ungleich Null für Misserfolg).
Der Grund, den ich frage, ist, dass ich auf das Vorhandensein von Dateien in testen muss, in gnuplot
denen " system("command")
der resultierende Zeichenstrom von stdout als Zeichenfolge zurückgegeben wird ". in gnuplot
ich kann direkt tun:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
Ich würde also gerne in der Lage sein, so etwas zu schreiben (Pseudo):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... das kann ich leider nicht direkt über test
und nutzen $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... Ich müsste die Logik umkehren.
Im Grunde müsste ich mir also eine Art benutzerdefinierte Skriptlösung einfallen lassen (oder ein Inline-Skript als Einzeiler schreiben) ... und ich dachte mir, ob es bereits einen Standardbefehl gibt, der 0 oder 1 drucken kann (oder eine benutzerdefinierte Nachricht) an stdout für die Existenz der Datei, dann muss ich das nicht tun :)
(Beachten Sie, dass ls
dies ein Kandidat sein mag, aber die Standardausgabe viel zu ausführlich ist. Wenn ich das vermeiden möchte, müsste ich die gesamte Ausgabe unterdrücken und den existierenden Status wie in wiederherstellen
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... aber das sind wieder zwei Befehle (und mehr Tippfehler) und "invertierte" Logik ...)
Gibt es einen einzigen Standardbefehl, der dies unter Linux ausführen kann?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?Antworten:
Klingt so, als müsste der Exit-Status umgekehrt werden, damit Sie Folgendes tun können:
oder:
(Beachten Sie, dass dies
-f
gilt, wenn die Datei vorhanden ist und eine reguläre Datei ist. )quelle
Verwenden Sie diesen einzelnen Bash-Befehl:
Das
[]
führt den Test durch und gibt bei Erfolg 0 zurückquelle
&&
und||
Operatoren:[ -f /home/user/file_name ] || echo "File not present"
und auch[ -f /home/user/file_name ] && echo "File is present"
Was ist mit "Invertieren der Logik" durch:
quelle
Das funktioniert:
... wenn Sie PowerShell installiert haben. Es wird entweder die Zeichenfolge "True" zurückgegeben, wenn der Pfad vorhanden ist, oder "False", wenn dies nicht der Fall ist. (Erhalte ich für diese Antwort "sarkastisch wenig hilfreiche" Punkte?)
quelle