내 Bash 스크립트의 다음 줄
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
이 오류가 발생합니다.
line 46: ${OUPUT_RESULTS}: ambiguous redirect
왜?
OUPUT_RESULTS = "filename.log"
하면 모호한 리디렉션이 발생합니다. bash는 =
연산자 주위에 공간이 없기를 원하기 때문 입니다.
내 Bash 스크립트의 다음 줄
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
이 오류가 발생합니다.
line 46: ${OUPUT_RESULTS}: ambiguous redirect
왜?
OUPUT_RESULTS = "filename.log"
하면 모호한 리디렉션이 발생합니다. bash는 =
연산자 주위에 공간이 없기를 원하기 때문 입니다.
답변:
배쉬는 때로는 꽤 둔감 할 수 있습니다.
다음 명령은 기본적으로 동일한 오류에 대해 서로 다른 오류 메시지를 반환합니다.
$ echo hello >
bash: syntax error near unexpected token `newline`
$ echo hello > ${NONEXISTENT}
bash: ${NONEXISTENT}: ambiguous redirect
$ echo hello > "${NONEXISTENT}"
bash: : No such file or directory
변수 주위에 따옴표를 추가하면 "모호한 리디렉션"메시지를 처리하는 좋은 방법 인 것 같습니다. 입력 실수를 했을 때 와 파일 이름의 공백으로 인해 오류가 발생 하면 더 나은 메시지를받는 경향이 있습니다 . 따옴표를 사용하는 것이 해결책입니다.
sh -c 'echo hello >/tmp/hello' >/tmp/world
제대로 작동합니다.
명명 된 변수 OUPUT_RESULTS
가 OUTPUT_RESULTS
있습니까 아니면 더 가능성이 있습니까?
michael@isolde:~/junk$ ABC=junk.txt
michael@isolde:~/junk$ echo "Booger" > $ABC
michael@isolde:~/junk$ echo "Booger" >> $ABB
bash: $ABB: ambiguous redirect
michael@isolde:~/junk$
ABC="junk file.txt"
에도 여전히 문제가 있습니다.
변수 주위에 따옴표를 넣으십시오. 공백이 있으면 "모호한 리디렉션"도 제공합니다. 또한 철자를 확인하십시오
echo $AAAA" "$DDDD" "$MOL_TAG >> "${OUPUT_RESULTS}"
예를 들어 모호한 리디렉션
$ var="file with spaces"
$ echo $AAAA" "$DDDD" "$MOL_TAG >> ${var}
bash: ${var}: ambiguous redirect
$ echo $AAAA" "$DDDD" "$MOL_TAG >> "${var}"
$ cat file\ with\ spaces
aaaa dddd mol_tag
최근에 리디렉션 파일 이름에 공백이 있으면 "모호한 리디렉션"메시지가 나타납니다.
예를 들어 리디렉션 application$(date +%Y%m%d%k%M%S).log
하고 잘못된 서식 문자를 지정하면 오전 10시 전에 리디렉션이 실패합니다. 그러나 사용한 application$(date +%Y%m%d%H%M%S).log
경우 성공합니다. 이는 %k
형식 ' 9'
이 오전 9시에 %H
생성 '09'
되고 오전 9 시에 생성 되기 때문 입니다.
echo $(date +%Y%m%d%k%M%S)
준다 20140626 95138
echo $(date +%Y%m%d%H%M%S)
준다 20140626095138
잘못된 날짜는 다음과 같습니다.
echo "a" > myapp20140626 95138.log
다음은 원하는 것입니다.
echo "a" > myapp20140626095138.log
"모호한 리디렉션"을 유발할 수있는 또 다른 사항 \t
\n
\r
은 작성중인 변수 이름에 있습니다.
아마 \n\r
아닐까요? 그러나주의의 측면에서 잘못
이 시도
echo "a" > ${output_name//[$'\t\n\r']}
\t
줄의 시작 부분에 HTML, 탭을 구문 분석하는 동안이 문제에 부딪 쳤습니다 .
스크립트의 리디렉션에 변수가 포함되어 있고 스크립트 본문이 괄호로 묶인 섹션에서 해당 변수를 정의하면 "모호한 리디렉션"오류가 발생합니다. 재현 가능한 예는 다음과 같습니다.
vim a.sh
스크립트를 만들려면(logit="/home/ubuntu/test.log" && echo "a") >> ${logit}
chmod +x a.sh
그것을 실행 가능하게 만들기 위해a.sh
이렇게하면 "/home/ubuntu/a.sh : 1 행 : $ logit : 모호한 리디렉션"이 표시됩니다. 이 때문입니다
"괄호 사이에 명령 목록을 배치하면 내 보내지 않은 변수를 제거하지 않고 서브 쉘이 작성되고 목록의 각 명령이 해당 서브 쉘에서 실행됩니다. 목록이 서브 쉘에서 실행되므로 변수 지정은 유지되지 않습니다. 서브 쉘이 완료된 후에 적용됩니다. "
이를 정정하기 위해 2 단계에서 스크립트를 수정하여 괄호 밖에 변수를 정의 할 수 있습니다. logit="/home/ubuntu/test.log" && (echo "a") >> $logit
${OUPUT_RESULTS}
. 만약 당신이 의미한다면 철자 오류$OUTPUT_RESULTS}