이것을 발견해도 괜찮습니다.
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
...하지만 거기에 약간의 타이핑이 있습니다. :)
그래서 "default"단일 명령이 있다면 방황하고있었습니다. 그러면 파일 존재 결과가 stdout
?
test
종료 상태와 함께 사용할 수도 있습니다 $?
.
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... 그러나 이것은 여전히 두 가지 명령입니다. 논리도 "역"입니다 (성공의 경우 0, 실패의 경우 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
and 를 통해 직접 사용할 수는 없습니다 $?
.
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"
?