Como colar comandos em um TTY?

20

Eu tenho alguns comandos e caminhos de arquivo bastante longos que copiei para a área de transferência e preciso executar em um TTY, no entanto, os caminhos de arquivo são muito longos para redigitar e gostaria de colá-los depois do $(eu posso digitar novamente os comandos antes). eles então), existe uma maneira de fazer isso?

Então, eu gostaria de executar um comando e colocá-lo na próxima linha, começando com $o texto copiado para a área de transferência da seguinte maneira:

$ specialCommandToPasteText
$ pastedText

Estou executando o Ubuntu GNOME 16.04 com o GNOME 3.20.


fonte
3
Cole os comandos em um script Bash em um editor de texto e execute o script no TTY?
Nick Weinberg
@NickWeinberg: Não é realmente uma opção, tudo isso está na CLI e os programas que tenho em execução apenas têm a capacidade de copiar.
2
De quais programas você os está copiando?
21416 Nick Weinberg
Você está usando gpmpara fornecer suporte ao mouse no VT, conforme sugerido em sua própria resposta a uma pergunta anterior ?
steeldriver
11
Uma possível solução seria usar a função copiar / colar funcionalidade em tmux ou tela
Nick Weinberg

Respostas:

28

É simples, mas você precisa de uma ferramenta adicional.

  1. Instale o pacote xselque fornece um comando fácil para acessar a área de transferência:

    sudo apt-get install xsel
    
  2. Descubra qual $DISPLAYsua área de trabalho está usando. Normalmente deveria ser :0, mas você pode verificá-lo executando este comando em um emulador de terminal na área de trabalho da GUI:

    echo $DISPLAY
    

    Assumirei que a saída é :0, substitua-a pela sua saída real nos seguintes comandos, se for diferente.

  3. Copie o comando que você deseja executar no TTY, por exemplo, usando Ctrl+ C.

  4. Mude para o TTY que deseja usar, por exemplo, para TTY1 usando Ctrl+ Alt+ F1.
    Faça o login digitando seu nome de usuário e senha.

  5. Digite o comando completo que deseja executar, mas substitua a parte que deseja inserir na área de transferência $(DISPLAY=:0 xsel -ob).

    Por exemplo, se você copiou uma grande lista de pacotes para instalar, você pode digitar isso no TTY:

    sudo apt-get update && sudo apt-get install $(DISPLAY=:0 xsel -ob)
    

    O snippet da área de transferência não precisa necessariamente estar no final do seu comando, mas pode aparecer em qualquer lugar.


Para simplificar ainda mais, vamos mudar isso ainda um pouco complicado DISPLAY=:0 xsel -obpara um script. Vou dar o nome PASTE(porque pastejá está em uso), mas você também pode chamá-lo de maneira diferente.

Para criar o arquivo de script em um local em que todos os usuários possam executá-lo sem precisar especificar o caminho completo (eu recomendo /usr/local/binisso) e torná-lo executável, basta executar esses dois comandos:

( echo '#!/bin/bash' && echo 'DISPLAY=:0 xsel -ob' ) | sudo tee /usr/local/bin/PASTE
sudo chmod +x /usr/local/bin/PASTE

Agora você pode simplesmente incorporar $(PASTE)seus comandos em um TTY para inserir o conteúdo da área de transferência da área de trabalho.

Byte Commander
fonte
2
Obrigado! Isso vai me ajudar com muito mais coisas agora do que o que eu perguntei originalmente! :)
11
Você pode até armazenar DISPLAY=:0 xsel -obcomo alias do Bash ou pequeno script em qualquer lugar (vamos chamá-lo PASTE) e usar apenas um formulário abreviado como o $(PASTE)conteúdo da área de transferência em seus comandos.
Byte Commander
Very nice abordagem
Sergiy Kolodyazhnyy
21

Pessoalmente, eu apenas uso arquivos de texto:

  1. No seu ambiente de área de trabalho, abra um terminal e

    echo "whatever long text you have copied" > file
    
  2. Solte para o tty e

    $(cat file)
    
Terdon
fonte
2
Isso é bom de saber. Na verdade, não achei que um comando simples como esse funcionaria tão bem. Às vezes, a mente pensa muito complicada. Obrigado! =)
Terrance 19/06
11
Eu apenas uso some-command 'shift + insert (para colar). 'Retorna. A colagem entre aspas simples ou duplas impede que novas linhas no texto colado executem o comando antes que eu possa editá-lo para corrigir quaisquer problemas. IDK o que você ganha para colocar o texto em um arquivo. O Bash possui teclas de edição de linha muito poderosas, como a tecla Ctrl esquerda ou Ctrl direita para mover pelas palavras. alt-backspace para excluir palavras anteriores. Alt-d para excluir as palavras de encaminhamento, etc. etc.
Peter Cordes
Ah, acabei de descobrir que o OP significa um console de texto VT quando ele diz TTY. Alguém realmente deve editar a pergunta, porque cada terminal no qual você pode executar um shell é um tty, incluindo pseudo-terminais controlados por programas semelhantes ao xterm.
Peter Cordes
@PeterCordes, sim, mas o termo "tty" é frequentemente, se incorreto, usado para se referir a consoles virtuais.
terdon
4

Outra solução possível não listada acima envolve o uso vim, colagem e execução :!unix_commandno modo de comando:

  1. copie os comandos e o caminho para a área de transferência
  2. aberto vim, vá para o modo de comando Esc, digite o prompt:
  3. digite um bang ! e cole Ctrl+ Shift+ Vo comando que você copiou anteriormente no prompt e execute
Marcellinov
fonte