비슷한 질문이 많이 있다는 것을 알았고 게시된 제안을 시도했지만 제대로 작동하지 않는 것 같습니다. 아래는 내 코드입니다.
#!/bin/bash
while IFS="" read -d "" -r filename;
do
filearray[i++]="$filename"
done < <(find . -maxdepth 1 -type f -iname "*.txt" -print0)
printf '%s\n' "${filearray[0]}"
간단히 말해서, 특정 디렉터리에 있는 모든 txt 형식 파일을 검색하여 배열에 넣어 마지막에 표시하고 싶습니다. 명령줄에서 실행하면 아무런 문제가 없습니다. 좋은 결과. crontab을 통해 이 작업을 수행하면 다음 오류가 발생합니다.
syntax error near unexpected token `<'
`done < <(find . -maxdepth 1 -type f -iname "*.txt" -print0)'
이것은 cron 항목 자체입니다.
* * * * * . /usr/online/scripts/test.sh 2>> /usr/online/scripts/log/test.log
스크립트가 명령줄에서는 실행되지만 crontab에서는 실행되지 않는 이유는 무엇입니까? 쉘을 선언하고 있는데 crontab이 쉘을 사용해야 할까요? 내가 이것을 할 수 있는 또 다른 이유가 있습니까?
재키
답변1
command < <(other command)
는바시즘. Shebang 줄을 지정했으므로 다음을 수행해야 합니다.아니요crontab에서 쉘을 지정하면 매우 혼란스럽습니다. 다음 중 하나를 선택해야 합니다. 저는 shebang 라인을 정말 좋아합니다. "일반적인" 쉘 스크립트인 척하기보다는 그 뒤에 있는 구문을 명시적으로 만들기 때문입니다.
아, 스크립트가 실행 가능한지 확인하고오직 /path/to/your/script.sh
crontab 명령 필드에서아니요 sh /path/to/your/script.sh
, sh < /path/to/your/script.sh
심지어. /path/to/your/script.sh
. 마지막 세 개는 shebang 줄을 무시하고 대신 설정에 관계없이 cron 셸의 컨텍스트에서 스크립트를 실행합니다.
바라보다리디렉션 지침스크립트 출력을 파일에 저장하는 방법에 대한 추가 정보
답변2
스크립트가 실행 가능하고 명령줄에서 호출될 때 올바른 작업을 수행한다고 가정하고 다음과 같이 crontab 항목을 작성합니다(15분마다 실행).
*/15 * * * * /path/to/script.sh >/path/to/output 2>/path/to/errors