$BASH_ENV의 가용성을 보장하는 방법

$BASH_ENV의 가용성을 보장하는 방법

비대화형, 비로그인 쉘은 $BASH_ENV에 지정된 스크립트를 얻으려고 시도합니다. 하지만 크론 작업이나 스크립트가 특정 세션에 대해 $BASH_ENV를 설정하기 전에 $BASH_ENV가 설정되었는지 어떻게 확인할 수 있습니까? Bash 컴파일을 위한 유일한 옵션은 하드코딩입니까?

답변1

crontab의 모든 bash 스크립트를 로드하려면 BASH_ENVcrontab 수준에서 설정하세요.

BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

BASH_ENV특정 항목에만 설정 하려면 해당 항목에서 설정하세요. 그러면 BASH_ENVcrontab 자체에 나열된 코드에 대해 설정되지 않지만 어쨌든 거기에 복잡한 것을 넣는 것은 좋지 않습니다.

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.

관련 정보