/etc/profile
sh
대화 형 dash
로그인 모드 내에서 호출할 수 있습니다 . /etc
대화형 비로그인 모드에서 디렉터리에 호출해야 하는 파일이 있습니까?
답변1
쉘 dash
( sh
구현된 경우)은 로그인 쉘로 시작될 때 읽혀집니다 dash
. /etc/profile
그런 다음 읽습니다 ~/.profile
. 이 파일은 환경 변수를 ~/.profile
설정하고 내보낼 수 있습니다 . ENV
이 변수는 비로그인 셸에서 얻은 파일의 경로를 보유해야 합니다. 이는 일반적으로 /etc
.
dash
매뉴얼 에서 (필자의 강조):
ENV
대화형 쉘에 들어갈 때 환경 변수가 설정되거나.profile
로그인 쉘에 설정된 경우 쉘은 다음으로 이름이 지정된 파일에서 명령을 읽습니다ENV
. 따라서 사용자는 로그인 시에만 실행되는 명령.profile
과 각 대화형 쉘에 대해 실행되는 명령을 이 파일에 배치해야 합니다ENV
. 변수를 특정 파일로 설정 하려면 홈 디렉터리에ENV
다음 줄을 입력하세요..profile
ENV=$HOME/.shinit; export ENV
.shinit
원하는 파일 이름 으로 바꾸십시오 .
다른 셸이나 프로세스에서 로그인이 아닌 대화형 셸 세션을 호출하거나 생성할 때 sh
적절한 셸 초기화 파일로 설정되어 있는지 확인하세요. 이는 Bourne 유형 쉘에서 다음을 사용하여 수행할 수 있습니다.dash
ENV
ENV="$HOME/.shinit" sh
또는
ENV="$HOME/.shinit" dash
답변2
이 명령에 대한 또 다른 점은 둘 다 /bin/sh(일반적으로 UNIX 계열 시스템의 대시 쉘)를 호출하지만 대화형 쉘이 아닌 로그인 쉘로 호출한다는 것입니다. 따라서 ENV가 가리키는 파일은 실행되지 않고, 하드와이어된 /etc/profile 및 ~/.profile만 실행됩니다.
ENV를 읽으려면 쉘 명령 앞에 "sh -i -c"를 넣고 -c 뒤에 명령을 인용해야 하는 것 같습니다.
sh_command = 'sh -i -c "' + command + ' ' + args.join(' ') + '"'
env = { 'ENV' => Your.shellrc_file }
std_out, std_err, status = Open3.capture3(env, sh_command)
그러면 대화형 셸을 호출하는 로그인 셸의 약간의 비효율성을 겪게 되지만 ENV는 더 이상 무시되지 않습니다. bash를 선호하는 경우 sh->bash, ksh, zsh 또는 Fish 등을 변경할 수도 있습니다.