"at"(atd)를 사용하여 예약된 작업을 올바르게 예약하는 방법은 무엇입니까? 또는 bash에서 올바르게 인용/이스케이프하는 방법

"at"(atd)를 사용하여 예약된 작업을 올바르게 예약하는 방법은 무엇입니까? 또는 bash에서 올바르게 인용/이스케이프하는 방법

재부팅 후 "추가 작업"(일회성 작업)을 수행하는 작업을 예약하기 위해 "at"(atd)를 사용하여 명령줄을 만드는 방법을 찾고 있습니다. 내가 지금 찾고 있는 것은 "별" 일정에 따라 함께 연결하는 방법입니다.

내 문제는 bash에서 인용/이스케이프에서 길을 잃었다는 것입니다.

내가 지금까지 가지고 있고 수동으로 작동하는 것은 다음과 같습니다.

echo "somecommand -someOptions 2>&1 | mail -s \"$HOST after reboot: somecommand -someOptions\" [email protected]" | at now +5 minutes ;\
#do admin stuff before reboot in less than 5 mins here ;\
touch /fastboot ; reboot

언급했듯이 훌륭하게 작동합니다. 이제 모든 것을 또 다른 새로운 "AT" 명령으로 캡슐화하여 더 이상 수동으로 수행할 필요 없이 이전 명령줄을 특정 시작 시간으로 예약할 수 있기를 원합니다.

나는 모든 것을 다른 "at" 명령에 캡슐화/포함하는 것이 가능해야 한다고 생각하므로 올바르게 인용/이스케이프하는 방법을 이해하고 싶습니다.

나는 이것을 시도했습니다 (작동하지 않습니다):

echo "echo \"somecommand -someOptions 2>&1 | mail -s \\"$HOST after reboot: somecommand -someOptions\\" [email protected]\" | at now +5 minutes ;\
#do admin stuff before reboot in less than 5 mins here ;\
touch /fastboot ; reboot ; " | at now + 1 minute

다시 시작하고 다시 시작하기 전에 관리 작업을 수행하는 2개의 작업을 예약했지만 두 번째(나중에) 작업은 일부 잘못된 인용/이스케이프 때문에 스크램블/충돌되는 것으로 보입니다. 나는 여기서 무슨 일이 일어났는지, 그리고 내가 탈출하는 동안 무엇을 잘못했는지 더 알고 싶습니다. 이 경우 변수 확장이 필요하지 않기 때문에 외부에서 작은따옴표를 사용할 수 있을 것 같지만 거기에서도 변수 확장을 사용하고 싶다고 가정해 보겠습니다. 이 경우 어떻게 올바르게 이스케이프/인용해야 합니까?

답변1

\\"이어야 하는 내용을 작성할 때 백슬래시 큰따옴표를 잊어버렸습니다 \\\". 그러나 여기에 설명된 세 번째 유형의 셸 인용을 사용하면 이를 방지할 수 있습니다.

at now + 1 minute <<\!
echo "somecommand -someOptions 2>&1 | mail -s \"$HOST after reboot: somecommand -someOptions\" [email protected]" | at now +5 minutes
#do admin stuff before reboot in less than 5 mins here
touch /fastboot ; reboot
!

답변2

bash스크립트( , perl, ...) 에 수행하려는 작업을 포함합니다 . 디버그 스크립트. at스크립트를 실행하도록 지시합니다 .

at now + 5
/home/user/bin/doit
^D

관련 정보