Надеюсь, это нормально, заметить это, теперь, когда я столкнулся с этим:
Я уже знаю, что можно проверить существование файла с помощью команды 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"
?Ответы:
Похоже, вам нужно изменить статус выхода, чтобы вы могли сделать:
или:
(обратите внимание, что
-f
для, если файл существует и является обычным файлом ).источник
Используйте эту единственную команду bash:
[]
Выполнить тест и возвращает 0 в случае успехаисточник
&&
и||
операторами:[ -f /home/user/file_name ] || echo "File not present"
а также[ -f /home/user/file_name ] && echo "File is present"
Как насчет "инвертирования логики" путем:
источник
Это работает:
... если у вас установлен PowerShell. Он возвращает либо строку «True», если путь существует, либо «False», если его нет. (Получаю ли я «саркастически бесполезные» баллы за этот ответ?)
источник