-e opção com vários emuladores de terminal

1

Eu não gostei de como o xterm se comportou quando tentei rolar a saída de menos com o meu mouse (ele rola o histórico de comandos em vez de rolar menos). Então eu peguei Sakura, e se comportou do jeito que eu queria. No entanto, a opção '-e' não parece funcionar bem.

Quando eu digito

xterm -e "ls /usr/bin | less"

Eu recebo um novo xterm onde o comando ls /usr/bin | less foi executado. No entanto,

sakura -e "ls /usr/bin | less"

parece ignorar meu pedido, e simplesmente inicia um novo terminal Sakura.

Na verdade, eu experimentei outros emuladores e opções de terminal sem sucesso ...

sakura -x "ls /usr/bin | less"
xfce4-terminal -e "ls /usr/bin | less"
roxterm -e "ls /usr/bin | less"
lxterminal -e "ls /usr/bin | less"
lilyterm -e "ls /usr/bin | less"

Alguns deles ignoram o meu pedido e, por vezes, afirmam que dizem "Falha ao executar o processo filho ... (Nenhum ficheiro ou diretório)"

Atualmente estou no Arch. Eu me deparei com o link , que parece sugerir que Sakura tinha se comportado como eu desejei (atualmente tenho a versão 3.1.0).

Qualquer ajuda em obter sakura ou algum outro emulador de terminal 'legal' para se comportar como esperado seria muito apreciada (isto é, ter o comando $ TERM -e "ls / usr / bin | less" abrir um terminal emulador com o comando dado executado e ter a saída de menos rolável com a roda do mouse).

    
por math4tots 23.10.2013 / 10:27

1 resposta

3

sakura parece estar quebrado, mas para outros, existem dois tipos principais: aqueles que pegam um argumento depois de -e e o tratam como uma linha de comando de shell e aqueles que recebem uma lista de argumentos e o primeiro é usado para derivar o comando para executar (nenhum shell está envolvido, portanto, recursos do shell como pipes não podem ser usados.

xterm , como um caso especial cairá na segunda categoria se houver mais de um argumento ou o argumento for resolvido (por pesquisa em $PATH ) para um executável existente e na segunda categoria caso contrário. / p>

Então:

xterm -e 'ls | less'

Será executado o executável /usr/bin/ls | less por exemplo (sim, um nome de arquivo com espaços e caracteres de pipe) com ls | less como primeiro argumento, se existir, ou de outra forma (mais provável), /bin/sh com, sh , -c , ls | less caso contrário.

Na maioria dos outros terminais (e isso é recomendado também em xterm , bem como para levantar a ambiguidade), você precisa chamar sh explicitamente:

lxterminal -e sh -c 'ls | less'
sakura -e parece não estar funcionando. É -x funciona até certo ponto. Você pode fazer:

sakura -x 'sh -c "ls | less"'

Ele parece fazer uma análise parecida com um shell do único argumento passado para -x , dividir isso em uma lista de argumentos e depois executá-lo.

Sobre a rolagem em less . Ele funciona em sakura (e outros emuladores de terminal baseados em VTE) porque, quando em screen alternativo (como se depois de emitir tput smcup ), os eventos de rolagem para baixo e para cima enviam as mesmas seqüências de escape de quando pressionar Teclas Down e Up .

Você notará que não funciona com ls | less -X , em que smcup não é emitido.

xterm suporta isso como uma opção, não ativada por padrão. Você pode alterá-lo definindo o recurso XTerm.VT100.alternateScroll como true , por exemplo, adicionando:

XTerm.VT100.alternateScroll: true

para o seu ~/.Xdefaults (para xterm s iniciado nessa máquina), ou no arquivo de recursos carregado no seu servidor X (para xterm s iniciado em qualquer lugar e conectando ao seu servidor X) ou chamando xterm com:

xterm -xrm 'XTerm.VT100.alternateScroll: true' -e sh -c 'ls | less'
    
por 23.10.2013 / 14:01