쉘 스크립트가 있습니다출구실행 시 변수의 값입니다. 다른 스크립트에서도 동일한 값이 사용됩니다.
이 스크립트를 실행하는 방법(테스트 파일) 크론에서.
#!/bin/sh
export I="10"
echo $I
cron을 실행하기 위해 루트 액세스를 사용하겠습니다. 나는 다음 명령을 시도했습니다.
*/5 * * * * /home/ubuntu/backup/.test.sh
환경 변수를 확인했는데 아무것도 업데이트되지 않았습니다.
답변1
환경 변수는 프로세스와 직계 하위 프로세스 간에만 전달될 수 있습니다. 환경 변수를 변경하거나 환경 변수를 다른 프로세스 트리로 내보낼 수 없습니다. 또한 내보낸 변수는 내보내기가 완료된 동일한 수준이 아닌 현재 프로세스의 직계 하위 항목을 처리하는 데만 다시 사용할 수 있습니다.
답변2
실제로 변수는 cron의 스크립트 간에 공유되지 않습니다. 다음과 같은 환경 변수를 정의하더라도 맨페이지해당 변수를 변경하는 스크립트가 하나 있는 경우 두 번째 스크립트는 실제로 해당 변수를 변경하지 않습니다. 그러나 임시 파일을 사용하여(또는 디스크의 파일을 덮어쓰지 않으려는 경우 메모리에 파일을 생성할 수도 있음) 스크립트 간에 사용할 수 있습니다.
예를 들어:
10 * * * * /path/to/script1.sh
20 * * * * /path/to/script2.sh
script1.sh의 내용:
#!/bin/bash
echo "VAR1='VALUE1'" > /dev/shm/cronsharedfile
script2.sh의 내용:
#!/bin/bash
source /dev/shm/cronsharedfile
do_something_with $VAR1
이 경우 두 번째 스크립트는 script1.sh에서 할당한 올바른 값을 갖게 됩니다. 저는 공유 메모리(/dev/shm/cronsharedfile)에 저장된 파일을 사용했는데, 디스크(/path/to/whateverfile)에 파일을 생성할 수 있습니다.
답변3
다이어그램에 2개의 스크립트가 있는 경우 첫 번째 스크립트에서 내보낸 변수는 다음 스크립트에 표시됩니다. 따라서 이와 같은 크론 항목이 있는 경우
*/5 * * * * ( test1.sh; test2.sh ) > log.txt
그리고test1.sh~처럼
#!/bin/sh
export I="10"
echo $
그러면 $I
표시됩니다test2.sh.