내 기본 쉘 환경은 일부 명령을 bash
시작 xterm
하고 실행하려는 것입니다.zsh
일반적으로 일부 명령을 실행하려면 다음 명령을 사용합니다.
xterm -e "ls -lrt;pwd;whoami"
bash
이것은 쉘에서 명령을 실행하는 것입니다 xterm
.
다른 쉘을 사용하여 시작하려면 xterm
다음 명령을 사용합니다.
xterm -ls /bin/zsh
그렇다면 이 두 가지를 어떻게 결합할 수 있을까요? 내가 시도할 때. 다음 오류가 발생합니다.
[dinesh@mypc]$ xterm -ls /bin/zsh -e "ls"
xterm: bad command line option "/bin/zsh"
이 문제를 어떻게 해결하나요?
답변1
아니요, -ls
이 옵션은 xterm
인수를 사용하지 않으며 단지 실행되는 셸이 xterm
로그인 셸이어야 함을 지정합니다.
-ls
질문과 관련된 부분이 강조 표시된 플래그의 전체 부분은 다음과 같습니다 .
-ls 이 옵션은 시작할 쉘을 나타냅니다. xterm 창은 로그인 쉘이 됩니다(즉, 첫 번째 문자 argv[0]은 쉘에 다음을 나타내는 대시입니다. 사용자의 .login 또는 .profile을 읽어야 합니다.) -ls 플래그에 -e를 사용하고 loginShell 자원이 무시되는 경우 또한 xterm이 쉘을 만드는 방법을 모르기 때문에 제공됩니다. 주어진 명령을 시작한 후에 무엇을 하든 로그인 쉘 - 사용자가 선택한 쉘이 Bourne일 필요는 없습니다. 결국 그것은 껍질이다. 또한 xterm -e는 다음을 제공해야 합니다. 이를 필요로 하는 다른 애플리케이션에 일관된 기능 제공 loginShell이 다음인 경우 창에서 텍스트 모드 프로그램을 시작합니다. 무시되지 않으면 ~/.profile의 결과가 방해할 수 있습니다. 저것. -ls와 -e의 효과를 동시에 얻으려면 다음을 수행하십시오. 같은 것들을 제거 xterm -e /bin/bash -l -c "내 명령은 여기에 있습니다." 마지막으로 xterm -ls -e 때문에 -ls가 완전히 무시되지는 않습니다. 실제로 /var/run/wtmp 항목을 작성합니다(그렇게 구성한 경우). xterm -e의 경우에는 그렇지 않습니다.
답변2
xterm
$SHELL
명령줄은 저장된 셸(로그인 셸에 로그인할 때 처음 설정된 변수)을 사용하여 구문 분석됩니다. 따라서 쉘이 명령줄을 구문 분석하도록 하려면 zsh
다음을 수행하십시오.
SHELL=/bin/zsh xterm -e 'echo $ZSH_VERSION; sleep 4'
아니면 이렇게 할 수도 있습니다:
xterm -e zsh -c 'echo $ZSH_VERSION; sleep 4'
여러 인수를 전달할 때 xterm
명령줄을 구문 분석하기 위해 셸이 호출되지 않고 첫 번째 인수와 해당 인수를 직접 실행합니다 execvp()
.
답변3
@Stéphane의 답변 외에도 시스템에서 zsh를 사용하려는 유일한 사람인 경우 $HOME/.profile
zsh에서 SHELL 환경 변수를 설정할 수도 있습니다.export SHELL=/bin/zsh