파일이 존재하는지 확인하고 (사용자 정의) 메시지를 stdout에 인쇄하는 단일 명령은 무엇입니까?

파일이 존재하는지 확인하고 (사용자 정의) 메시지를 stdout에 인쇄하는 단일 명령은 무엇입니까?

이제 이 문제를 발견했길 바랍니다. 다음 사항에 유의하세요.

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"를 반환합니다. (이 답변에 대해 "아이러니하게도 도움이 되지 않음" 표시를 받을 수 있습니까?)

관련 정보