Inicia o xterm com shell diferente e executa comandos

2

Meu ambiente de shell padrão é bash e gostaria de iniciar um xterm com zsh e executar alguns comandos.

Em geral, para executar alguns comandos, estou usando o seguinte

xterm -e "ls -lrt;pwd;whoami"

Isso está executando os comandos em bash shell com xterm .

Para iniciar o xterm com shell diferente, estou usando o seguinte.

xterm -ls /bin/zsh

Então, como posso combinar os dois? Quando eu tentei. Eu tenho o erro abaixo.

[dinesh@mypc]$ xterm -ls /bin/zsh -e "ls"
xterm:  bad command line option "/bin/zsh"

Como resolver isso?

    
por Dinesh 26.06.2017 / 07:20

3 respostas

6

Não, a opção -ls para xterm não aceita argumentos, apenas especifica que o shell que xterm inicia deve ser um shell de login.

Veja a seção completa sobre o sinal -ls com a parte que é relevante para o seu problema realçada:

   -ls     This option indicates that the shell that is started in the
           xterm window will be a login shell (i.e., the first character
           of argv[0] will be a dash, indicating to the shell that it
           should read the user's .login or .profile).

           The -ls flag and the loginShell resource are ignored if -e is
           also given, because xterm does not know how to make the shell
           start the given command after whatever it does when it is a
           login shell - the user's shell of choice need not be a Bourne
           shell after all.  Also, xterm -e is supposed to provide a
           consistent functionality for other applications that need to
           start text-mode programs in a window, and if loginShell were
           not ignored, the result of ~/.profile might interfere with
           that.

           If you do want the effect of -ls and -e simultaneously, you may
           get away with something like

               xterm -e /bin/bash -l -c "my command here"

           Finally, -ls is not completely ignored, because xterm -ls -e
           does write a /var/run/wtmp entry (if configured to do so),
           whereas xterm -e does not.
    
por 26.06.2017 / 08:25
7

xterm usa o shell armazenado em $SHELL (variável inicialmente definida no login do seu shell de login) para analisar a linha de comando. Então, se você quiser que a linha de comando seja analisada por um zsh shell, faça:

SHELL=/bin/zsh xterm -e 'echo $ZSH_VERSION; sleep 4'

Ou você pode apenas fazer:

xterm -e zsh -c 'echo $ZSH_VERSION; sleep 4'

Quando passado mais de um argumento, xterm não invocará um shell para analisar uma linha de comando, ele executará o primeiro argumento com seus argumentos com execvp() diretamente.

    
por 26.06.2017 / 09:58
-3

Além da resposta do @Stéphane, você também pode definir sua variável de ambiente SHELL em $HOME/.profile com export SHELL=/bin/zsh , desde que você seja a única pessoa no seu sistema que deseja usar o zsh.

    
por 26.06.2017 / 10:19

Tags