SHELL="/bin/bash" 대 SHELL="bash"

SHELL="/bin/bash" 대 SHELL="bash"

SHELL="/bin/bash" 내보내기와 SHELL="bash" 내보내기의 차이점은 무엇입니까? 이전에는 export SHELL="bash".bashrc에 있었습니다 . 작동하는 것 같았습니다. $($SHELL)이 서브쉘을 생성했지만 공개 키 인증을 사용하는 SSH에서 오류가 발생했습니다.Shell "bash" is not executable: No such file or directory

답변1

$($SHELL)서브쉘을 생성했습니다

예, 왜냐하면 쉘 $SHELL(또는더 나은 "$SHELL"/bin/bash)는 귀하의 경우 bash두 생성 Bash 로 확장됩니다 .

참고 사항: 를 사용하면 명령 대체( )가 작동하는 $($SHELL)방식이므로 새 셸에서 나오는 출력은 셸이 종료된 후에 실행됩니다 . $( … )명령 대체말이 안 된다여기서는 요점을 보여줄 필요가 없습니다.

귀하의 요점은 다음과 같습니다. SHELL="bash", "$SHELL"Bash를 실행하지만 다른 도구(SSH 서버?)가 불평합니다.

어떤 도구가 불평하는지 명확하지 않습니다. 그리고 SHELL클라이언트 측에서 또는 서버 측에서 변조되었는지 알려주지 않았습니다 . 없다mcve질문에. .SHELL.bashrc​나는 이것들 중 어떤 것도 조사하지 않을 것입니다.

SHELL의 차이점에 대해 알려드리겠습니다./bin/bashbash 일반적으로.

환경 변수 의 목적 SHELL은 사용하려는 쉘을 가리키는 것입니다. 다양한 소프트웨어는 변수(설정된 경우)를 사용하여 어떤 이유로든 선택한 쉘을 실행하려고 시도할 수 있습니다. 관찰한 차이점은 일부 프로그램이PATH환경 변수, 일부는 그렇지 않습니다.

작품 에 대한 의존도는 PATH다음과 같습니다. 실행할 실행 파일을 "인코딩"하는 문자열이 있습니다. 예를 들어 문자열은 /bin/bash, foo/bash또는 일 수 있습니다 bash. 두 가지 경우가 있습니다:

  1. 문자열에 포함된 경우 /문자열 자체는 실행 파일에 대한 절대 경로(예: /bin/bash) 또는 상대 경로(예: )로 해석됩니다.foo/bash
  2. 문자열에 /(예: bash)이 포함되어 있지 않으면 실행 파일의 기본 이름만 지정합니다. 나머지 경로(예: 디렉터리 구성 요소)는 에서 옵니다 PATH. 기본적으로 PATH지정된 기본 이름을 가진 실행 파일을 포함 하는 지정된 첫 번째 디렉터리입니다 . 에 따라 PATH, , (​bash/bin/bash/home/you/bin/bash./bash드물게) 또는 전혀 그렇지 않습니다(귀하에게 command not found또는 유사한 오류가 발생함).

쉘은 에 의존 PATH하므로 쉘 bash(문자 그대로 입력하거나 확장에서 나타나는 $SHELL등) 에서 /bin/bash또는 /some/other/path/to/bash제대로 구성된 시스템을 찾습니다.

의존하지 않는 도구는 PATH문자열을 경로(경로 이름)로 처리합니다. 를 포함하는 문자열에는 아무런 차이가 없습니다 /. 를 포함하지 않는 문자열에는 큰 차이가 있습니다 /. 문자열이 경로로 직접 해석되면 " 현재 작업 디렉터리에 이름이 지정된 파일"을 의미하는 것과 bash동일합니다 ../bashbash

오류가 발생한 것은 무엇이든 분명히 변수의 내용을 검색하여 변수 SHELL에 의존하지 않고 경로로 사용했습니다 PATH.

이것은 옳은 일이었습니다. 참고 POSIX지정하다SHELL처럼:

이 변수는 사용자가 선호하는 명령 언어 해석기의 경로 이름을 나타냅니다.

조사하다 "경로명" 그리고 "경로명 확인", 이들은 에 의존하지 않습니다 PATH. 변수를 사용하는 모든 도구 SHELL는 해당 내용을 경로 이름으로 직접 처리해야 합니다.

SHELL="bash", 쉘에서는 확장되기 때문에 "$SHELL"Bash만 실행합니다.$SHELL다른 변수와 마찬가지로그리고 나서 bash치료를 받는다포함하지 않은 다른 명령과 마찬가지로/. 그래서 그것은 다소 부수적입니다.

SHELL="bash"POSIX 문서를 올바르게 해석했다면 SHELL="./bash". 이를 의미하더라도 를 사용하여 경로를 사용하는 것이 더 낫습니다 /. 따라서 사용할 수 있는 쉘의 메커니즘이 해석 PATH방법을 방해하지 않습니다 .SHELL

아마도 당신은 원하지 않을 것입니다 ./bash. 당신은 /bin/bash이것을 정확히 사용하고 싶습니다 .

관련 정보