2017-12-27 26 views
0

저는 몇 년 전에 UNIX에서 작업 했었습니다. 이제 막 돌아가고 있습니다. 누군가 내가 질문을 도와 줄 수 있는지 궁금합니다.유닉스에서 쉘을 변경하는 효과적인 방법

예를 들어 제가 bash에 있다면 암호를 입력하라는 메시지가 나온 후 chsh --shell /bin/tcsh이라고 말합니다. echo $SHELL라고 말하면 쉘을 바꿨다고 말할 수 없습니다. 그것은 여전히 ​​내가 bash가 아니라 C 쉘에 있다고 알려줍니다. 그래서 나가서 다시 시작해야합니다. 일단 내가 다시 로그하면 다음 그것은 내가 C 쉘에 있다고 알려줍니다.

쉘을 변경하는 효과적인 방법이 있습니까? 내가 로그인 및 로그 아웃 할 필요가없는 것은?

미리 감사드립니다.

+3

'tcsh' 명령과'echo $ 0' 명령 만 사용하십시오. '$ SHELL'에 의지 할 수는 없습니다. 예를 들어'man bash'를보십시오. –

+1

당신은 $ SHELL을 의지 할 수 있지만 그 목적은 여러분이 어느 쉘에 있는지 알려주는 것이 아닙니다. 유일한 목적은 여러분이 선호하는 쉘을 다른 프로그램에 알려주는 것입니다. 프로그램이 쉘을 생성 할 필요가 있다면, 환경 변수 SHELL의 값을 검사해서 사용해야한다. –

+1

'$ SHELL'은 ('man bash'의) "현재 사용자의 로그인 쉘 * 전체 경로명"이다. 반드시 현재의 쉘은 아니다. – cdarke

답변

0

chsh 명령 (1) : 당신은 chsh 명령으로 쉘을 변경하면 로그인 쉘

을 변경, 그것은 자동으로 해당 쉘 터미널을 열 때마다 로그인해야합니다.

임시 다른 쉘을 사용하려면, 단지 바로 그 쉘을 실행 : "tcsh의", "zsh을"등

당신이 스크립트를 사용 오두막에 대한 특정 쉘을 사용하려면

"#을 ! ".

예 - 다음은 스크립트를 보장하는 쉘 스크립트의 첫 번째 줄에 다음은 쉬와 실행 (당신은 당신의 시스템에서 사용할 수있는 쉘이 작업을 수행 할 수 있습니다) : 항상

#!/bin/sh 
0

확인하여 현재 쉘 사용 :

echo $0 

그런 식으로 현재 실행중인 프로세스 (현재 쉘)를 얻을 수 있습니다. $ SHELL을 출력하면 서버에 로그인 할 때 열리는 기본 셸을 반환합니다. 그렇지 않은 경우 신뢰할 수없는 것이 아닙니다.

ubuntu$ echo $SHELL 
/bin/bash 
ubuntu$ echo $0 
-bash 
ubuntu$ sh 
\[\e[31m\]\u\[\e[m\]$ echo $SHELL 
/bin/bash 
\[\e[31m\]\u\[\e[m\]$ echo $0 
sh 
\[\e[31m\]\u\[\e[m\]$ 

감사합니다!

+1

'$ 0'은 믿을만하지 않습니다. 이것이 다소 병적이라는 데 동의하지만 다음을 고려하십시오 :'rm -f/bin/csh; ln/bin/bash/bin/csh; csh; echo $ 0' –

+0

@WilliamPursell 특정 특정 경우에 $ 0은 신뢰할 수 없지만 대부분의 일반적인 경우에는 동의합니다. 예, 당신의 표본은 병리학 적입니다. 누군가가 정말로 의도한다면, 당신이 어디서 무엇을 실행 하는지를 알 수있는 방법으로 시스템을 정말로 망칠 수 있습니다. 그러나 그러한 경우에 그것은 정말로 당신이 정말로 잃어버린 것을 의미 할 것입니다. 서버를 제어하십시오. 그냥 계속해서 이미지를 재사용하는 것이 좋습니다. :피 –