다음 쉘 명령 실행에 실패했습니다.
$ >/dev/null { : ; }
-bash: syntax error near unexpected token `}'
그러나 간단한 명령 앞에 리디렉션을 넣으면 괜찮습니다.
$ >/dev/null :
이것은 bash 매뉴얼에서 언급되지 않습니다.
중괄호를 사용하여 그룹화 된 명령 앞에 리디렉션을 넣을 수없는 이유
언어 문법이 그것을 허용하지 않기 때문입니다.
에서 POSIX 수동 쉘 에서를 2.4 Reserved words
다음과 같은 중점 광산을 읽을 수 있습니다 :
다음 단어는 예약어로 인식됩니다.
! 에서 ESAC 할
{다음 완료 Fi 인터넷을
할 때까지에 대한} ELIF를
다른 동안 만약의 경우이 인식은 인용 된 문자가없고 단어가 다음과 같이 사용되는 경우에만 발생합니다.
명령의 첫 단어
case, for 또는 in을 제외한 예약어 중 하나 뒤에 오는 첫 번째 단어
case 명령의 세 번째 단어 (이 경우 in 만 유효 함)
for 명령의 세 번째 단어 (이 경우 in 및 do 만 유효 함)
들어 {
그룹화 명령을 소개하는이 명령의 첫 번째 단어이어야한다. 예를 들어 </dev/null if false; them echo 1; fi
또는 </dev/null while true; do echo 1; done
. 예약어는 명령의 첫 번째 단어 여야합니다.
어떻게 할 수 있습니까?
중괄호 또는 명령 뒤에 넣습니다. 그룹화 "내부"모든 명령에 대한 리디렉션을 "적용"합니다.
{ echo 1; } >/dev/null
while echo this will go to file1; do echo this too; break; done >/tmp/file1.txt
if read a; then read b; echo yes; else echo no; fi </tmp/file1 >/tmp/file2
다음과 같이 : $ (Q) {xxx; }
명령 대체 $(...)
가 확장 되기 전에 리디렉션이 구문 분석되기 때문에 이렇게하는 것은 불가능합니다 . 이렇게 스크립팅 할 수 없습니다. eval을 사용하여 식을 재평가 할 수 있지만 eval은 evil에서 온 문자입니다 . 검색하는 올바른 방법은 exec
like exec 1>/dev/null
또는 like를 사용하여 stdout 또는 사용자 정의 파일 설명자를 대상 파일로 리디렉션하는 것 exec {FD}>/dev/null; { cmd; } >${FD}
입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다