Comando Piping Terminal para o Gedit para edição adicional [duplicado]

7

Eu tenho um comando complexo na minha janela de terminal que gostaria de editar mais e. g.

echo "This is a complex command I want to edit in an editor"

Como posso canalizar essa linha de código - não a saída, mas o código real - para, por exemplo, Gedit para edição posterior? Algo ao longo das linhas desta solução, apenas para um editor baseado em GUI: link

Por favor, note que estou procurando especificamente uma maneira de editar em um editor externo.

    
por somethis 10.12.2015 / 12:29

3 respostas

12

bash , zsh e ksh (incluindo seus derivados) possuem um comando muito legal no comando fc , que abre um editor para alterar seu comando anterior. Se a variável FCEDIT não estiver configurada, por padrão, chamará o editor configurado em EDITOR ; se a variável EDITOR não estiver definida, por padrão, chamará nano .

O que você pode fazer é definir FCEDIT=/usr/bin/gedit . Agora há o truque: você executa um longo comando, você decide que quer mudá-lo, então imediatamente depois de executá-lo, chame fc . Isso gerará a janela gedit com seu comando pronto para ser alterado. Depois de alterar, salve e saia como faria normalmente.

A desvantagem? Ele deixará um rastro de mensagens gtk desnecessárias no terminal. Pessoalmente, eu uso editores de linha de comando vim ou nano em vez de gedit - eles não deixam nenhum rastreio, além de poderem ser usados em TTY não apenas no ambiente da GUI. Eu sugiro strongmente que você mude para nano , pois é um dos mais fáceis editores de texto de linha de comando.

Nota extra em bash , você pode fazer o mesmo com a linha de comando que está atualmente editando com ctrl + X + E ou ctrl + X - ctrl + E ; você pode ter o mesmo comportamento em zsh adicionando ao seu .zshrc

autoload -z edit-command-line
zle -N edit-command-line
bindkey '^XE' edit-command-line # binds CTRL+X+E
bindkey "^X^E" edit-command-line # binds CTRL+X - CTRL+E
    
por Sergiy Kolodyazhnyy 10.12.2015 / 15:11
7

Use gedit - . Desta forma, lerá de stdin, então você pode usar

echo 'echo "complex command"'|gedit -

ou simplesmente

gedit - <<< 'echo "complex command"'

Dessa forma, você não precisará criar um arquivo tmp separado.

    
por karoshi 10.12.2015 / 14:54
3

Com este comando você pode conseguir isso: echo "This is a complex command" > tempfile | gedit tempfile .

Editar:

Pelo que entendi, você quer algo assim: %código%. Por exemplo, echo echo "This is a complex command" > tempfile | gedit tempfile abrirá um arquivo gedit com o seguinte texto: "ls -d".

Dito isso, eu aconselharia a edição de comandos no Gedit. O terminal Linux é extremamente poderoso (temos uma conclusão de tabulação poderosa).

    
por Tshilidzi Mudau 10.12.2015 / 12:35