비대화형, 비로그인 쉘은 $BASH_ENV에 지정된 스크립트를 소싱하려고 시도합니다. 하지만 크론 작업이나 스크립트가 특정 세션에 대해 $BASH_ENV를 설정하기 전에 $BASH_ENV가 설정되도록 어떻게 보장할 수 있나요? 하드코딩된 Bash를 컴파일하는 유일한 옵션이 있습니까?
답변1
crontab의 모든 bash 스크립트를 로드하려면 BASH_ENV
crontab 수준에서 설정하세요.
BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script
BASH_ENV
특정 항목에만 설정하려면 해당 항목에서 설정하세요. 그런 다음 BASH_ENV
crontab 자체에 나열된 코드에 대해 설정되지 않지만 어쨌든 거기에 복잡한 것을 넣는 것은 나쁜 생각입니다.
12 34 * * * export BASH_ENV=/path/to/startup.bash; /path/to/bash_script
1 23 1 * * /path/to/other_bash_script
특정 스크립트가 항상 일부 구성 파일을 로드하도록 하려면 스크립트 내에서 직접 로드하세요.
#!/bin/bash
. /path/to/configuration.bash
…
답변2
BASH_ENV
에서만 읽혀집니다.비대화형그리고 해당 쉘이 bash인 경우에만 해당됩니다(이름으로 sh
도 호출되지 않음). 로그인하지 않은 대화형 쉘은 다음을 찾지 않습니다 $BASH_ENV
.
$ export BASH_ENV=/home/cuonglm/bash-env.sh
$ bash -lci '. test.sh'
QWERTY
$ bash -lc '. test.sh'
BASH_ENV read
QWERTY
$ bash -ci '. test.sh'
QWERTY
$ bash -c '. test.sh'
BASH_ENV read
QWERTY
사용자를 위해 비대화형 쉘에서 실행되는 표준 파일이 없습니다. 별도의 파일로 설정한 다음 소스를 지정해야 합니다.
bash -c '. ~/.profile; echo 123'
/etc/environment
또는 또는 와 같은 일부 시스템 전체 구성 파일에서 설정할 수 있습니다 /etc/bashrc.bashrc
.