Init 스크립트는 SSH를 통해 두 번 실행됩니다.

Init 스크립트는 SSH를 통해 두 번 실행됩니다.

우분투 12.04를 실행 중입니다.

환경을 설정하는 스크립트가 있는데 /etc/bash.bashrc.

터미널을 열면 Ctr+Alt+T스크립트가 한 번 실행됩니다. 하지만 다른 상자에서 내 컴퓨터에 SSH로 연결하면 /etc/bash.bashrcinit 스크립트가 실행되지만 그 다음에도 실행됩니다.다시,왜인지 모르겠습니다.

다른 사용자도 동일한 "이중" 초기화를 경험합니다. 이것이 반드시 문제가 되는 것은 아니지만 학술적인 이유로 이 문제를 따로 분리하고 싶습니다.

/etc/bash.bashrc실행될 때 알려주기 위해 에코를 추가했습니다 . 처음에는 에코가 보이지만 두 번째에는 다른 것이 스크립트를 실행하고 있다고 믿게 만드는 에코가 보이지 않습니다. 그게 무엇인지 모르겠습니다. ~/.profile, ~/.bashrc, 를 확인했습니다.~/etc/profile

이 동작은 사용자가 SSH를 통해 컴퓨터에 연결된 경우에만 발생한다는 점을 강조하고 싶습니다. 대화형/로그인/비로그인 쉘 사이에 약간의 차이점이 있다는 것을 알고 있지만 아직 문제를 잘 이해하지 못합니다.

답변1

해당 환경 설정 스크립트를 호출하는 것이 무엇인지 파악하려면 사용되는 위치가 아닌 해당 스크립트 내에 추적 명령을 추가해야 합니다.

쉘 스크립트에 포함된 스택을 보고하는 이식 가능한 방법은 없습니다. Bash에서는 변수를 통해 이를 확인할 수 있습니다 BASH_SOURCE. Dash는 실행하는 동안 소스 스크립트를 열어두므로 열려 있는 파일을 나열하면 좋은 아이디어를 얻을 수 있습니다. bash는 기본 대화형 셸이고 dash는 기본 스크립팅 셸이므로 대부분의 경우에 적용됩니다.

if [ -n "$BASH_SOURCE" ]; then
  eval 'echo "${BASH_SOURCE[@]}"'
else
  readlink /proc/$$/fd/[4-9] 2>/dev/null
fi

( 이것은 sh의 구문 오류이므로 ${BASH_SOURCE[@]}뒤에 보호됩니다 .)eval


알아채다.bashrc또는 /etc/bash.bashrc환경변수의 위치가 잘못되었습니다.. 이는 bash의 대화형 비로그인 인스턴스에 의해서만 실행됩니다. 특히 SSH 로그인에 대해서는 실행되지 않습니다. /etc/bash.bashrcSSH 로그인에 대해 실행 되면 다른 스크립트(보통 ~/.bash_profile)가 해당 로그인을 얻는다는 의미입니다. 사이트별 환경 변수의 올바른 위치는 스크립트에 있거나 /etc/profile.d/의 추가 항목에 있습니다 /etc/environment.

로그인 셸 및 대화형 셸에 대해서는 다음을 참조하세요.로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?

관련 정보