이 순서도 해석에서
나는 남자 배쉬에서 그것을 발견했다.
bash가 대화식 로그인 쉘 또는 --login 옵션을 사용하는 비 대화식 쉘로 호출되면 해당 파일이 존재하는 경우 먼저 / etc / profile 파일에서 명령을 읽고 실행합니다.
것을 그 상태 대화 형 로그인 쉘 읽기 /etc/profile
(--noprofile없이)
또한 read 옵션이있는 비 대화식 쉘--login
/etc/profile
즉 몇 가지 가능한 떠날 것 같다 로그인 쉘 (있는 $0
로 시작을 -
)되고 있음을 비 대화 형이 (어쩌면 간단 등의 스크립트를 실행 date
) 읽을 수 있습니다 (소스) /etc/profile
.
이 아이디어를 확인하거나 거부하려면
먼저을 사용 su -l -
하여 로그인 쉘을 -
첫 번째 문자로 시작했지만 비 대화식으로 만들지 못했습니다 (테스트를 표시하여 테스트 할 수 없음).
같은 것을 호출
$ bash -c 'date' -bash
로그인 쉘로보고하지 않습니다 (첫 번째 문자가 인 경우에도 -
).
세부 사항을 밝히려면 이것을 시도하십시오.
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016
는
$0
A가 가지고-
첫 번째 문자로, 전혀 없다i
의 값 (상호 작용)$-
하지만이보고되지login_shell
합니다 (-u). 이 경우 / etc / profile을 읽지 못했지만 이것이 올바른 테스트인지 확실하지 않습니다.
이 질문에 " 특별하지 않은 드문 비 대화식 로그인 쉘" 에 대한 언급도 있습니다 .
이 사람 의 결론/etc/profile
은 항상 읽었다 는 것 입니다.
요약 테이블 읽기 : 대화식 및 비 대화식 로그인 쉘 모두 읽기 /etc/profile
그리고, 경우 이 페이지에서 예 올바른지 :
Some examples
$ su bob # interactive non-login shell
$ su - bob # interactive login shell
$ exec su - bob # interactive login shell
$ exec su - bob -c 'env' # non-interactive login shell
$ ssh bob@example.com # interactive login shell, `~/.profile`
$ ssh bob@example.com env # non-interactive non-login shell, `~/.bashrc`
읽은 exec su - bob -c 'env'
보고서 테스트 /etc/profile
.
한마디로 :
그것은 가질 수 있습니다 비 대화 형 로그인 (또는 -l --login 호출되지 않음) 쉘을?
그리고 사실이라면 /etc/profile
파일을 읽고 있습니까?
위의 내용이 사실이라면 모든 로그인 셸 (대화 형)이 / etc / profile ( --noprofile
옵션 없이 )을 읽는 다고 결론을 내립니다 .
참고 : / etc / profile을 읽고 있음을 감지하려면 파일의 맨 앞에 다음 명령을 추가하십시오.
echo "'/etc/profile' is being read"
--login
옵션을 사용하는 것입니다. 두 번째로,exec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"
(C qoutes로 인코딩 됨)$'/etc/profile read\nshopt -s login_shell\nbash himBH'
그렇게하면 로그인이지만 대화 형입니다. 로그인과 비대화식이 필요합니다 . 내가 무엇을 놓치고 있습니까?