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 de taper là :)
Donc, je me demandais s'il y avait une seule commande "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 demande, c'est que je dois tester l'existence du fichier dans gnuplot
, dont " system("command")
renvoie le flux de caractères résultant de stdout sous forme de chaîne. "; en 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 cela 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?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?Réponses:
Il semble que vous ayez besoin que l'état de sortie soit inversé, vous pouvez donc:
ou:
(notez que
-f
c'est pour si le fichier existe et est un fichier normal ).la source
Utilisez cette commande bash unique:
L'
[]
exécution du test et retourne 0 en cas de succèsla source
&&
et||
opérateurs:[ -f /home/user/file_name ] || echo "File not present"
ainsi[ -f /home/user/file_name ] && echo "File is present"
Qu'en est-il de "inverser la logique" en:
la source
Cela marche:
... si vous avez installé PowerShell. Elle renvoie soit la chaîne "True", si le chemin existe, soit "False" si ce n'est pas le cas. (Est-ce que j'obtiens des points "sarcastiquement inutiles" pour cette réponse?)
la source