다른 쉘을 사용하여 xterm을 시작하고 명령을 실행하십시오.

다른 쉘을 사용하여 xterm을 시작하고 명령을 실행하십시오.

내 기본 쉘 환경은 일부 명령을 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/.profilezsh에서 SHELL 환경 변수를 설정할 수도 있습니다.export SHELL=/bin/zsh

관련 정보