비로그인 쉘에 대한 호출 파일로 /etc 디렉토리에 dash 및 sh가 있습니까?

비로그인 쉘에 대한 호출 파일로 /etc 디렉토리에 dash 및 sh가 있습니까?

/etc/profilesh대화 형 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 유형 쉘에서 다음을 사용하여 수행할 수 있습니다.dashENV

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 등을 변경할 수도 있습니다.

관련 정보