Spero che vada bene notare questo, ora che l'ho incontrato:
Sono già consapevole che si può verificare l'esistenza di file usando il comando test
( [
):
$ 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
... ma è un po 'di digitazione lì :)
Quindi, stavo vagando se c'è un singolo comando "predefinito", che restituirà il risultato dell'esistenza del file stdout
?
Posso anche usare test
con lo stato di uscita $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... ma questo è ancora due comandi - e la logica è anche "inversa" (0 per il successo e diverso da zero per il fallimento).
Il motivo per cui sto chiedendo è che ho bisogno di provare l'esistenza del file gnuplot
, il cui " system("command")
restituisce il flusso di caratteri risultante da stdout come una stringa. "; in gnuplot
posso fare direttamente:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
quindi sostanzialmente vorrei poter scrivere qualcosa del genere (pseudo):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... sfortunatamente, non posso usarlo direttamente tramite test
e $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... Dovrei invertire la logica.
Quindi, dovrei fondamentalmente trovare una sorta di soluzione di script personalizzata (o scrivere uno script in linea come one-liner) ... e ho pensato, se esiste già un comando predefinito che può stampare 0 o 1 (o un messaggio personalizzato) a stdout per l'esistenza del file, quindi non devo farlo :)
(nota che ls
potrebbe essere un candidato, ma il suo output stdout è decisamente troppo dettagliato; e se voglio evitarlo, dovrei sopprimere tutto l'output e restituire di nuovo lo stato esistente, come in
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... ma questo è ancora due comandi (e più digitando) e logica "invertita" ...)
Quindi, esiste un singolo comando predefinito che può farlo in Linux?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?