Espero que seja bom notar isso, agora que eu o encontrei:
Eu já sei que é possível testar a existência de arquivos usando o 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
... mas isso é um pouco digitado lá :)Então, eu estava vagando se houver um comando único "padrão", que retornará o resultado da existência de arquivo stdout?
Também posso usar testcom o status de saída $?:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... mas ainda existem dois comandos - e a lógica também é "inversa" (0 para sucesso e diferente de zero para falha).
A razão pela qual estou perguntando é que preciso testar a existência do arquivo in gnuplot, cujo " system("command")retorna o fluxo de caracteres resultante de stdout como uma string. "; em gnuploteu posso fazer diretamente:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
então eu basicamente gostaria de escrever algo assim (pseudo):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... infelizmente, não posso usá-lo diretamente via teste $?:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... eu teria que inverter a lógica.
Então, eu basicamente teria que criar uma solução de script personalizada (ou escrever um script embutido como uma linha) ... e pensei: se já existe um comando padrão que pode imprimir 0 ou 1 (ou uma mensagem personalizada) para stdout para a existência do arquivo, então não preciso fazer isso :)
(observe que lspode ser um candidato, mas a saída stdout é muito detalhada; e se eu quiser evitar isso, teria que suprimir toda a saída e retornar novamente o status existente, como em
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... mas são novamente dois comandos (e mais digitação) e lógica "invertida" ...)
Então, existe um único comando padrão que pode fazer isso no Linux?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"?