이제 이 문제를 발견했길 바랍니다. 다음 사항에 유의하세요.
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은 성공을 의미하고 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
...논리를 뒤집어야 합니다.
그래서 기본적으로 사용자 정의 스크립트 솔루션을 생각해내야 합니다(또는 인라인 스크립트를 한 줄로 작성해야 합니다)... 파일이 존재한다는 것을 알기 위해 stdout에 대한 기본 명령(또는 사용자 정의 메시지)이 이미 있는 경우라고 생각했습니다. 그럼 난 할 필요 없어:)
(이것이 ls
후보일 수 있지만 표준 출력 출력이 너무 장황합니다. 이를 피하려면 모든 출력을 억제하고 현재 상태를 다시 반환해야 합니다.
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
...하지만 이는 두 개의 명령(및 더 많은 입력)과 "역방향" 논리입니다...)
그렇다면 Linux에서 이 작업을 수행하는 기본 명령이 있습니까?
답변1
다음 단일 bash 명령을 사용하십시오.
[ -f /home/user/file_name ]
[]
테스트를 실행 하고 성공하면 0을 반환합니다.
답변2
종료 상태를 반전시켜야 하는 것처럼 들리므로 다음과 같이 할 수 있습니다.
system("[ ! -e file ]; echo $?")
또는:
system("[ -e file ]; echo $((!$?))")
(참고 -f
로 이는파일이 존재하는 경우일반 파일입니다. 당신은 또한 볼 수 있습니다이것은 관련 stackoverflow Q&A에 대한 나의 답변입니다.의미에 대한 추가 여담존재하다여기).
답변3
"논리를 뒤집는 것"은 어떻습니까?
file_exists = 1-system("test -f exists.file; echo $?")
답변4
이것은 작동합니다:
pwsh -c Test-Path /etc/passwd
...PowerShell이 설치된 경우. 경로가 존재하면 "True" 문자열을 반환하고, 존재하지 않으면 "False"를 반환합니다. (이 답변에 대해 "아이러니하게도 도움이 되지 않음" 표시를 받을 수 있습니까?)