J'espère que c'est OK de le noter, maintenant que je l'ai rencontré:
Je suis déjà conscient que l'on peut tester l'existence d'un fichier en utilisant la commande 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
... mais c'est un peu taper ici :)
Donc, je me demandais s'il y avait une commande unique "par défaut", qui retournerait le résultat de l'existence du fichier à stdout
?
Je peux également utiliser test
avec le statut de sortie $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... mais il s'agit toujours de deux commandes - et la logique est également "inverse" (0 pour le succès et non nulle pour l'échec).
La raison pour laquelle je pose la question est que je dois tester l'existence d'un fichier dans gnuplot
, dont "system("command")
renvoie le flux de caractères résultant de stdout sous forme de chaîne. "; dans gnuplot
je peux faire directement:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
donc j'aimerais pouvoir écrire quelque chose comme ça (pseudo):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... malheureusement, je ne peux pas l'utiliser directement via test
et $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... Il faudrait que j'inverse la logique.
Donc, je devrais essentiellement trouver une sorte de solution de script personnalisé (ou écrire un script en ligne comme une ligne) ... et je me suis dit, s'il existe déjà une commande par défaut qui peut imprimer 0 ou 1 (ou un message personnalisé) à stdout pour l'existence du fichier, alors je n'ai pas à le faire :)
(notez que ls
peut être un candidat, mais sa sortie standard est beaucoup trop verbeuse; et si je veux éviter cela, je devrais supprimer toutes les sorties et retourner à nouveau le statut d'exister, comme dans
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... mais c'est encore deux commandes (et plus de frappe), et une logique "inversée" ...)
Alors, existe-t-il une seule commande par défaut qui peut le faire sous Linux?
Il semble que vous ayez besoin que l'état de sortie soit inversé, vous pouvez donc:
system("[ ! -e file ]; echo $?")
ou:
system("[ -e file ]; echo $((!$?))")
(Notez que -f
est pour si le fichier existe et est un fichier normal).
Utilisez cette commande bash unique:
[ -f /home/user/file_name ]
Le []
effectuer le test et retourne 0 en cas de succès
Qu'en est-il de "inverser la logique" en:
file_exists = 1-system("test -f exists.file; echo $?")