![SHELL="/bin/bash" 대 SHELL="bash"](https://rvso.com/image/1648608/SHELL%3D%22%2Fbin%2Fbash%22%20%EB%8C%80%20SHELL%3D%22bash%22.png)
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/bash
bash
일반적으로.
환경 변수 의 목적 SHELL
은 사용하려는 쉘을 가리키는 것입니다. 다양한 소프트웨어는 변수(설정된 경우)를 사용하여 어떤 이유로든 선택한 쉘을 실행하려고 시도할 수 있습니다. 관찰한 차이점은 일부 프로그램이PATH
환경 변수, 일부는 그렇지 않습니다.
작품 에 대한 의존도는 PATH
다음과 같습니다. 실행할 실행 파일을 "인코딩"하는 문자열이 있습니다. 예를 들어 문자열은 /bin/bash
, foo/bash
또는 일 수 있습니다 bash
. 두 가지 경우가 있습니다:
- 문자열에 포함된 경우
/
문자열 자체는 실행 파일에 대한 절대 경로(예:/bin/bash
) 또는 상대 경로(예: )로 해석됩니다.foo/bash
- 문자열에
/
(예: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
동일합니다 ../bash
bash
오류가 발생한 것은 무엇이든 분명히 변수의 내용을 검색하여 변수 SHELL
에 의존하지 않고 경로로 사용했습니다 PATH
.
이것은 옳은 일이었습니다. 참고 POSIX지정하다SHELL
처럼:
이 변수는 사용자가 선호하는 명령 언어 해석기의 경로 이름을 나타냅니다.
조사하다 "경로명" 그리고 "경로명 확인", 이들은 에 의존하지 않습니다 PATH
. 변수를 사용하는 모든 도구 SHELL
는 해당 내용을 경로 이름으로 직접 처리해야 합니다.
SHELL="bash"
, 쉘에서는 확장되기 때문에 "$SHELL"
Bash만 실행합니다.$SHELL
다른 변수와 마찬가지로그리고 나서 bash
치료를 받는다포함하지 않은 다른 명령과 마찬가지로/
. 그래서 그것은 다소 부수적입니다.
SHELL="bash"
POSIX 문서를 올바르게 해석했다면 SHELL="./bash"
. 이를 의미하더라도 를 사용하여 경로를 사용하는 것이 더 낫습니다 /
. 따라서 사용할 수 있는 쉘의 메커니즘이 해석 PATH
방법을 방해하지 않습니다 .SHELL
아마도 당신은 원하지 않을 것입니다 ./bash
. 당신은 /bin/bash
이것을 정확히 사용하고 싶습니다 .