Umarım bunu not etmeliyim, şimdi karşılaştım:
Zaten bir test
( [
) komutunu kullanarak dosya varlığını test edebilirsiniz farkındayım :
$ 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
... ama oraya yazmak biraz :)
öyle Yani, "varsayılan" tek bir komut varsa dolaşmak oldu, bu dosya varlığı sonucunu döndürür stdout
?
Ben de test
çıkış durumu ile kullanabilirsiniz $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... ancak bu hala iki komuttur - ve mantık da "ters" dir (başarı için 0 ve başarısızlık için sıfır olmayan).
Sormamın nedeni, dosya varlığını test etmem gerektiğidir gnuplot
, bu da " system("command")
elde edilen karakter akışını stdout'tan bir dize olarak döndürür "; içinde gnuplot
doğrudan yapabilirsiniz:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
temelde böyle bir şey yazmak istiyorum istiyorum (sözde):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... ne yazık ki, bunu doğrudan test
ve aracılığıyla kullanamıyorum $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... mantığı tersine çevirmem gerekecekti.
Yani, temelde özel bir komut dosyası çözümü (ya da tek satırlık bir satır içi komut dosyası yazma) ile gelmek zorundayım ... ve 0 veya 1 yazdırabilecek varsayılan bir komut varsa (veya özel bir mesaj) dosya varlığı için stdout, o zaman bunu yapmak zorunda değilim :)
( ls
bunun bir aday olabileceğini unutmayın , ancak stdout çıktısı çok ayrıntılı; ve bundan kaçınmak istersem, tüm çıktıları bastırmam ve var olan durumu tekrar döndürmem gerekir
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... ama bu yine iki komut (ve daha fazla yazma) ve "ters çevrilmiş" mantık ...)
Peki, bunu Linux'ta yapabilen tek bir varsayılan komut var mı?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?