"모호한 리디렉션" 오류를 가져오는 중
내 Bash 스크립트의 다음 행
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
다음 오류가 나타납니다.
line 46: ${OUPUT_RESULTS}: ambiguous redirect
왜요?
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
변수 주위에 따옴표를 추가하는 것이 "모호한 리디렉션" 메시지를 처리하는 좋은 방법인 것 같습니다.입력 오류가 있을 때 메시지가 더 잘 표시되는 경향이 있으며, 파일 이름에 공백이 있기 때문에 오류가 발생할 경우 따옴표를 사용하는 것이 해결책입니다.
은 이이지변있습까라는 이름의 가 있나요?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$
변수 주위에 따옴표를 붙입니다.공백이 있는 경우 "모호한 리디렉션"도 제공합니다. 또한 철자를 확인하십시오.
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
${OUPUT_RESULTS}에 지정된 경로에 공백 문자가 포함되어 있습니까?그렇다면 다음을 사용하는 것을 고려해 보는 것이 좋습니다.... >> "${OUPUT_RESULTS}"
(따옴표 사용).
변수 이름을 다음으로 변경하는 것도 고려할 수 있습니다.${OUTPUT_RESULTS}
)
브레이스 확장을 사용하여 출력을 여러 파일에 쓸 때 이 오류가 발생했습니다.
예:echo "text" > {f1,f2}.txt
으로 의결과가 됩니다.-bash: {f1,f2}.txt: ambiguous redirect
경우에는 이경, 용사를 합니다.tee
여러 파일로 출력하기
echo "text" | tee {f1,f2,...,fn}.txt 1>/dev/null
그자리의 1>/dev/null
텍스트가 stdout에 기록되는 것을 방지합니다.
파에추려다사용니합다음을면가를 사용합니다.tee -a
스크립트의 리디렉션에 변수가 포함되어 있고 스크립트 본문이 괄호로 둘러싸인 섹션에서 해당 변수를 정의하는 경우 "모호한 리디렉션" 오류가 발생합니다.다음은 재현 가능한 예입니다.
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
GitHub Actions를 사용하여 이 "모호한 리디렉션" 오류를 디버깅하려는 경우.다음과 같은 방법으로 시도해 볼 것을 강력히 제안합니다.
echo "MY_VAR=foobar" >> $GITHUB_ENV
$GITHUB_ENV에서 경험한 동작은 예에서 보여주듯이 파이프라인 환경 변수에 이를 추가하는 것입니다.MY_VAR
방금 bash 스크립트에서 이 오류가 발생했습니다.이 문제는 이전 줄 끝에 실수로 발생하여 오류가 발생했습니다.
"모호한 리디렉션"을 유발할 수 있는 또 다른 한 가지는 다음과 같습니다.\t
\n
\r
당신이 쓰고 있는 변수 이름에도.
아닐 수도 있음\n\r
하지만 주의의 측면에서 실수를 하라.
사용해 보세요.
echo "a" > ${output_name//[$'\t\n\r']}
HTML, 탭을 구문 분석하는 중에 이것으로 맞았어요.\t
줄의 맨 앞에
이것도 그럴 수 있습니다.
변수에 파일을 지정하지 않고 출력을 리디렉션하면 bash에서 이 오류가 발생합니다.
files=`ls`
out_file = /path/to/output_file.t
for i in `echo "$files"`;
do
content=`cat $i`
echo "${content} ${i}" >> ${out_file}
done
out_file 변수가 올바르게 설정되어 있지 않으므로 이 점도 유의하시기 바랍니다.그나저나 이 코드는 콘솔에 있는 모든 콘텐츠와 파일 이름을 인쇄하는 것입니다.
셸 명령에서 변수 이름을 사용하는 경우, 다음과 연결해야 합니다.+
서명하다.
예:
두 개의 파일이 있고 파일 이름을 하드 코딩하지 않을 경우 대신 변수 이름을 사용합니다.
"input.txt" = x
"output.txt" = y
그런 다음('따옴표 내 셸 명령' + x > + y)
특히 os.system 명령으로 파이썬 프로그램 내에서 이를 사용하는 경우에는 이러한 방식으로 작동할 것입니다.
파일이 아닌 대상 변수의 철자가 잘못되어 존재하지 않기 때문에 유용한 경고였습니다.
echo "ja" >> $doesNotExist
결과적으로
./howdy.sh: line 4: $doesNotExist: ambiguous redirect
나의 경우, 환경을 통해 출력 파일을 지정하는 경우(예:$ENV_OF_LOG_FILE
), 그러면 오류가 모호하게 리디렉션됩니다.
그러나 일반 텍스트를 파일 경로로 사용하는 경우(예:/path/to/log_file
), 그러면 오류가 없습니다.
언급URL : https://stackoverflow.com/questions/2462385/getting-an-ambiguous-redirect-error
'programing' 카테고리의 다른 글
정수로 캐스트 문자열 입력 (0) | 2023.05.07 |
---|---|
postgresql로 "무시 삽입" 및 "중복 키 업데이트 시"(sql 병합)를 에뮬레이트하는 방법은 무엇입니까? (0) | 2023.05.07 |
예외가 있는 Python 유형 암시 (0) | 2023.05.07 |
VBA의 멀티스레딩 (0) | 2023.05.07 |
.translate()를 사용하여 Python 3.x의 문자열에서 구두점을 제거하는 방법은 무엇입니까? (0) | 2023.05.07 |