Tl; dr Pergunta
Existe uma boa maneira de editar interativamente uma string do shell, armazenando o valor editado em uma variável.
Basicamente exatamente como a=$(cat "hello world" > /tmp/command && vim /tmp/command </dev/tty >/dev/tty && cat /tmp/command)
, mas sem limpar minha tela durante a edição (para que eu não perca o meu lugar e ainda possa ler a saída de comandos anteriores).
Eu realmente quero um comportamento exatamente como imv ou icp , mas eu só quero receber a string de volta em vez de mover ou copiar um arquivo.
Ou como a=$(echo "hello world" | zenity --entry-text "$(cat)" --entry)
, mas sem X.
Esta é uma pergunta do tipo "QUERO UM PONY", mas parece útil em situações gerais.
Contexto
A troca de pilha favorece o contexto, então aqui está o meu caso de uso específico:
Eu amo a edição de linha zsh . Eu estou usando isso para um widget zsh adicionar partes de um comando no meu histórico à minha linha atual assim:
strace <M-l h>
- >
<LIST of history commands>
- >
SELECT COMMAND
- >
POP UP EDITOR
- >
TWEAK COMMAND
- >
strace command with lots of arguments some of which I want to edit
Alternativas consideradas
Use o editor e o histórico de linha de comando do shell ( !!
) para fazer o que eu quero.
Usando zenity echo hello | zenity --entry-text -entry
< - não gosto muito de usar o X