cron에서 큰 따옴표와 퍼센트 부호 (%)를 이스케이프 처리


75

다음 명령은 프롬프트에서 작동하지만 crontab에서는 작동하지 않습니다.

 grep abc  /var/log/messages | grep "`date '+%B %d'`" | mail -s"abc log of `hostname`" shantanu.oak+`hostname`@gmail.com

매일 cron에 추가해야합니다.


귀하의 예는 훌륭합니다. %는 큰 따옴표, 작은 따옴표 및 백 따옴표로 묶습니다. 이스케이프 처리가 효과가 있다는 희망을 남기지 않습니다.
tuxayo

답변:


126

당신은 %표지판 을 탈출해야 합니다. 그들은 crontabs에서 특별한 의미를 가지고 있습니다.

man (5) crontab:

Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command as standard input.

7
+1 매우 혼란 스럽습니다. 나도 몰랐습니다. 나는 이것에 빠지지 않았다는 것에 놀랐다.
Kyle Smith

3
글쎄, 나는 이것에 부딪쳤다. 나는 사용 date +%F하고 있었고 아무데도 없었다
adamo

2
이 구문이 유용하게 사용됩니까? 으로 SHELL=/bin/bash, 나는 항상 다시 작성할 수 있습니다 cat %Hello worldcat <<<'Hello world'. 특수 구문이 필요하지 않습니다.
Witiko

@Witiko 당신이 요구하는 "특수 구문"이 백퍼센트를 이스케이프 처리하는 경우 OP의 자체 질문은 필요한 예제입니다. 백분율이 필요한 명령 인수, 특히 날짜 프로그램, crontab 명령. 왜 cron이 왜 처음 에이 문제를 가지고 있는지 묻는다면 : 즉 % 대신 줄 바꿈을 대체하면 crontab에 필요한 한 줄에 두 가지로 구성된 "명령"을 제공 할 수 있다고 생각합니다 또는 더 많은 보조 명령.
gwideman

후자의. 그리고 내가 언급했듯이 bash로도 똑같이 할 수 있습니다. Cron의 구문을 어지럽 힐 필요가 없습니다.
Witiko

7

이것은 귀하의 질문에 직접 대답하지는 않지만 / usr / local / bin (또는 ~ / bin 또는 적절한 것)에 스크립트 파일을 만들고 cron에서 호출하는 것이 좋습니다. 테스트하고 편집하기가 더 쉽습니다.


2
내 경험상 50 개의 작은 파일을 유지하는 것보다 crontab에서 50 개의 라인을 유지하는 것이 훨씬 쉽습니다. 확실히 더 긴 스크립트를 스크립트 파일로 바꾸고 싶을 수도 있지만, 한 줄짜리 스크립트에는 너무 과도 할 수 있습니다.
Witiko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.