Semoga tidak apa-apa untuk mencatat ini, sekarang saya sudah menemukannya:
Saya sudah mengetahui bahwa seseorang dapat menguji keberadaan file menggunakan perintah 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
... tapi itu sedikit mengetik di sana. :)
Jadi, saya berkeliaran jika ada perintah tunggal "default", yang akan mengembalikan hasil keberadaan file stdout
?
Saya juga dapat menggunakan test
dengan status keluar $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... tapi ini masih dua perintah - dan logikanya juga "terbalik" (0 untuk sukses, dan bukan nol untuk kegagalan).
Alasan saya bertanya adalah bahwa saya perlu menguji keberadaan file gnuplot
, yang " system("command")
mengembalikan aliran karakter yang dihasilkan dari stdout sebagai string. "; di gnuplot
saya bisa lakukan langsung:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
jadi pada dasarnya saya ingin dapat menulis sesuatu seperti ini (semu):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... sayangnya, saya tidak bisa menggunakannya secara langsung melalui test
dan $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... Saya harus membalikkan logika.
Jadi, pada dasarnya saya harus membuat semacam solusi skrip khusus (atau menulis skrip inline sebagai one-liner) ... dan saya pikir, jika sudah ada perintah default yang dapat mencetak 0 atau 1 (atau pesan khusus) ke stdout untuk keberadaan file, maka saya tidak perlu melakukannya :)
(perhatikan bahwa ls
mungkin seorang kandidat, tetapi keluarannya terlalu bertele-tele; dan jika saya ingin menghindarinya, saya harus menekan semua keluaran dan kembali mengembalikan status yang ada, seperti pada
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... tapi itu lagi dua perintah (dan lebih banyak mengetik), dan "terbalik" logika ...)
Jadi, adakah satu perintah standar yang dapat melakukan ini di Linux?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?