모호한 리디렉션 오류를 보내는 crontab 항목이 있었습니다. 날짜를 읽는 명령인 것은 확실하지만 수정 방법을 모르겠습니다. 다른 해결책이 있나요?
/bin/sh는 /bin/bash로 리디렉션됩니다.
/opt/startup-shutdown/startup.instances Other > /tmp/`date +%Y%m%d%H%M%S`-cron.log 2>&1
다음을 제공합니다:
/bin/sh: 1
: ambiguous redirect
답변1
크론탭 사용%특별한 목적을 위해:
개행 문자까지 줄의 전체 명령 부분또는 % 문자, /bin/sh 또는 crontab 파일의 SHELL 변수에 지정된 쉘에 의해 실행됩니다. 백슬래시()로 이스케이프하지 않는 한 명령의 백분율 기호(%)는 개행 문자로 변경되고 첫 번째 % 이후의 모든 데이터는 명령에 표준 입력으로 전송됩니다.
crontab에 date 명령을 넣으면,모든%백슬래시를 사용하여 인용해야 합니다.
답변2
캐리지 리턴 문제인 것 같아요.
예를 들어 리디렉션 연산자의 오른쪽에 있는 단어가 두 개 이상의 필드로 확장되는 경우( echo > *
예: gets에서) Bash가 표시하는 오류입니다 bash: *: ambiguous redirect
.
여기서는 1
그 뒤에 줄바꿈 문자가 있다고 언급되어 있습니다. 다음과 같은 입력으로 비슷한 오류가 발생할 수 있습니다 2>&1<CR><LF>
.
$ printf 'echo foo 2>&1\r\n' |bash
: ambiguous redirect
여기서 CR은 커서를 줄의 시작 부분으로 이동하므로 그 뒤의 모든 내용이 첫 번째 부분을 덮어씁니다. 여기에 CR이 표시됩니다.
$ printf 'echo foo 2>&1\r\n' |bash 2>&1|cat -A
bash: line 1: 1^M: ambiguous redirect$
귀하의 경우 CR이 일반 줄 바꿈으로 인쇄되는 이유를 모르겠습니다. 터미널 설정일 수 있습니다.
파일이 Windows에서 제공되었는지 확인하고 dos2unix
다른 방법을 통해 sed -i 's/\r//'
실행하세요 . "캐리지 리턴"을 검색하면 클릭이 발생합니다.