Espero que esté bien notar esto, ahora que lo he encontrado:
Ya soy consciente de que uno puede probar la existencia del archivo usando el 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
... pero eso es un poco de tipeo allí. :)
Entonces, estaba divagando si hay un comando único "predeterminado", que devolverá el resultado de la existencia del archivo stdout
.
También puedo usar test
con el estado de salida $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... pero esto sigue siendo dos comandos, y la lógica también es "inversa" (0 para el éxito y no cero para el fracaso).
La razón por la que pregunto es que necesito probar la existencia del archivo gnuplot
, cuyo " system("command")
devuelve la secuencia de caracteres resultante de stdout como una cadena "; en gnuplot
puedo hacer directamente:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
así que básicamente me gustaría poder escribir algo como esto (pseudo):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... desafortunadamente, no puedo usar eso directamente vía test
y $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... Tendría que invertir la lógica.
Entonces, básicamente tendría que encontrar una especie de solución de script personalizada (o escribir un script en línea como una línea) ... y pensé, si ya hay un comando predeterminado que puede imprimir 0 o 1 (o un mensaje personalizado) para stdout para la existencia del archivo, entonces no tengo que hacerlo :)
(tenga en cuenta que ls
puede ser un candidato, pero su salida estándar es demasiado detallada; y si quiero evitar eso, tendría que suprimir toda la salida y volver a devolver el estado de existencia, como en
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... pero eso es nuevamente dos comandos (y más tipeo), y lógica "invertida" ...)
Entonces, ¿hay un solo comando predeterminado que pueda hacer esto en Linux?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?Respuestas:
Parece que necesita revertir el estado de salida, por lo que podría hacer:
o:
(tenga en cuenta que
-f
es para si el archivo existe y es un archivo normal ).fuente
Use este comando bash único:
El
[]
realizar la prueba y devuelve 0 en caso de éxitofuente
&&
y||
los operadores:[ -f /home/user/file_name ] || echo "File not present"
y también[ -f /home/user/file_name ] && echo "File is present"
¿Qué pasa con "invertir la lógica" al:
fuente
Esto funciona:
... si tiene instalado PowerShell. Devuelve la cadena "Verdadero", si la ruta existe, o "Falso" si no existe. (¿Recibo puntos "sarcásticamente inútiles" por esta respuesta?)
fuente