crontab은 bash.bashrc 변수를 얻지 못합니다.

crontab은 bash.bashrc 변수를 얻지 못합니다.

Ubuntu 16.04 Bash 4.3.46(1) 끝에서 /etc/bash.bashrc다음 변수를 선언했습니다.

drt="/var/www/html"

파일을 찾았습니다( source /etc/bash.bashrc)

crontab -e테스트를 위해 실행 하고 추가했습니다 * * * * * touch /var/www/html/myFile.sh. 이것은 작동하지만 * * * * * touch ${drt}/myFile.sh작동하지 않습니다.

에서 선언한 변수가 bash.bashrc전역변수인데 왜 처리되지 않나요 crontab?

업데이트 1

원칙적으로 중복을 피하기 위해 스트림을 (또는 ) drt="/var/www/html"에 복사하고 싶지 않습니다 .crontabcron.d

업데이트 2

나는 팔로우한다이번 회의정답으로 표시된 답변이 내 문제를 해결하지 못한 것 같습니다.

이것두 번째 답변조금 불분명합니다. 왜 이 조건문을 (일부?) bashrc파일에 넣어야 할까요?

bash.bashrcSHELL=/bin/bash또한 (맨 처음에 추가됨)과 관련된 세 번째 솔루션을 시도하여 crontab파일을 저장하고 소스를 가져왔지만 bash.bashrc테스트에서는 아무것도 변경되지 않았습니다 * * * * * touch ~/myfiile.

그러므로 나는 그 질문을 재검토하거나 적어도 그에 대한 대답이 명확해지기를 요청합니다.

답변1

에 정의된 변수는 *.bashrc쉘에서 실행되는 프로그램에서 읽을 수 있고 쉘에서만 독점적으로 처리된다는 점에서 전역 변수입니다. 프로그램이 이러한 환경 변수를 읽는지 여부와 이를 해석하는 방법은 전적으로 설계에 달려 있으며 프로그램이 환경 변수를 처리하는 방법에 대한 요구 사항은 없습니다.

즉, croncrontab이 해석되는 방식은 cron프로그램 자체에 의해 결정됩니다. "전역" 환경 변수를 읽지 않고 자체 구문을 사용하여 "환경 변수"를 정의하기로 결정합니다. 이것은 의도적으로 설계된 것입니다. ${drt}에서 그냥 사용할 수 없는 이유를 이해할 수 있다면 crontab에서 기대한 대로 작동하지 않는 CMakeLists.txt이유도 이해할 수 있어야 합니다 .${drt}

물론 다음 줄을 추가할 수 있습니다.예약 된 일들당신이 원하는 경우.

drt="/var/www/html"

관련 정보