Сподіваюся, що це нормально зазначити, тепер, коли я зіткнувся з цим:
Я вже знаю, що можна перевірити наявність файлів за допомогою команди 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
... але це трохи вводити там. :)
Отже, я блукав, чи є одна команда "за замовчуванням", яка поверне результат існування файлу stdout
?
Я також можу використовувати test
зі статусом виходу $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... але це все-таки дві команди - і логіка також "зворотна" (0 для успіху, а ненульова - для відмови).
Причина, про яку я запитую, полягає в тому, що мені потрібно перевірити наявність файлу в gnuplot
, "який system("command")
повертає отриманий потік символів з stdout у вигляді рядка. " в gnuplot
я можу зробити прямо:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
тому я в основному хотів би мати можливість написати щось подібне (псевдо):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... на жаль, я не можу використовувати це безпосередньо через test
та $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... я повинен був би перевернути логіку.
Таким чином, я в основному повинен був би придумати якесь власне рішення сценарію (або написати сценарій вбудований як однолінійний) ... і я подумав, якщо вже є команда за замовчуванням, яка може надрукувати 0 або 1 (або користувальницьке повідомлення) для stdout для існування файлів, тоді мені не потрібно цього робити :)
(зауважте, що це ls
може бути кандидатом, але вихід stdout є занадто багатослівним; і якщо я хочу цього уникнути, мені доведеться придушити весь вихід і знову повернути існуючий статус, як у
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... але це знову дві команди (і більше набору тексту) та "перевернута" логіка ...)
Отже, чи є одна команда за замовчуванням, яка може це зробити в Linux?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?