고쳐 쓰다:

고쳐 쓰다:

man cron첫 번째 기호 처리를 완전히 이해하지 못했습니다 %.

% in files 에 대한 대부분의 질문과 달리 crontab실제로는좋다개행 문자로 %를 사용하십시오. 리터럴 "%" 기호 또는 표준 입력의 변경/리디렉션으로 해석되지 않도록 첫 번째 %로 무엇을 해야 합니까? 나는 그것이 무엇을 하고 있는지, 필요하지 않으면 어떻게 해야 하는지 잘 이해하지 못합니다.

crontab 라인 예:

0 0 * * *  root  newline="%" %echo "this${newline}that" %command2 %command3

(세미콜론이나 \n을 사용할 수 있다는 것을 알고 있지만 이 예에서는 %-newline을 사용했습니다.)

고쳐 쓰다:

댓글이 요점을 놓치고 있는 것 같아서 문제는 다음과 같습니다.

인간 크론탭(5)

"여섯 번째" 필드(줄의 나머지 부분)는 실행할 명령을 지정합니다. 줄의 전체 명령 부분(개행 또는 "%" 문자까지)은 SHELL 변수 /bin/sh 또는 cronfile에 지정된 셸에 의해 실행됩니다.

...백슬래시()로 이스케이프하지 않는 한 명령의 "%" 문자는 개행 문자로 변경됩니다...

...첫 번째 % 이후의 모든 데이터는 표준 입력으로 명령에 전송됩니다.

작성된 대로 내가 제공한 crontab 라인이 현재 작동하지 않는다는 것이 분명합니다. 이스케이프되지 않은 %를 이해합니다.첫 번째 이후-> 개행 문자(첫 번째 굵은 점). 내가 이해하지 못하는 것은 두 번째 굵은 점입니다.

내가 하고 싶은 것이 %를 사용하여 개행 문자를 삽입하는 것이라면, 이는 표준 입력이 명령". 이는 첫 번째 %가 나머지 명령 처리를 방해하지 않도록 명령 시작 부분에 추가 "%"를 추가하거나 다른 것을 넣는 것을 의미할 수 있습니다.

2~3개의 이스케이프되지 않은 %s가 있는 행의 몇 가지 예는 cron이 첫 번째 이스케이프되지 않은 %를 해석하는 방법과 명령 처리에서 수행하는 역할을 보여주는 이상적입니다.

또한 두 번째 굵은 점은 문자 그대로 받아들여지는 것입니까? 그렇다면 두 번째 후속 이스케이프되지 않은 %를 사용하여 개행 역할을 할 수 있습니다. 본질적으로 내 명령은 쉘에 전달되기 전에 % -> 개행 대체 뒤에 여러 줄의 스크립트를 포함할 수 있습니다. 그렇죠?

답변1

crontab에서 시간 지정 이후의 부분과 이스케이프되지 않은 첫 번째 부분은 쉘에 전달될 코드를 구성합니다(및 %다음 인수). 다음은 표준 입력을 통해 쉘에 공급될 라인을 먼저 형성합니다.sh-c%

실제로 다음과 같은 crontab 라인을 사용하십시오.

* * * * * shell code%line 1%line 2

cron다음 셸 코드에 해당하는 작업이 1분마다 수행됩니다.

printf '%s\n' 'line 1' 'line 2' | sh -c 'shell code'

따라서 실제로 해당 변수에 개행 문자를 저장하는 데 사용할 수 없습니다 shell code.

여기서 이 코드의 변수에 개행 문자를 저장하려면 다음을 수행할 수 있습니다.

* * * * * eval "$(printf 'nl="\n"')"; echo "blah${nl}blah"

그러나 코드를 바로 만들어서 shstdin에 공급할 수 있습니다.

* * * * * sh%nl='%'%echo "blah${nl}blah"

여기에서 cron실행되고 실행될 다른 프로세스 의 표준 입력은 sh -c sh다음과 같습니다.shsh

nl='
'
echo "blah${nl}blah"

또 다른 옵션은 cronksh93 스타일 인용 형식(예: // )을 지원하는 쉘에 다음을 사용하는 대신 수행하도록 지시하는 것입니다.$'...'ksh93zshbashsh

SHELL=/bin/zsh
* * * * * nl=$'\n'; echo "blah${nl}blah"

관련 정보