echo Hello World | nano - | less
Voglio modificare Hello -> Arrivederci nell'editor di testo.
Non deve essere con nano. Sono bloccato con la lettura nano di stdin ma mi impone di scrivere su un file (scrivendo su - crea un file chiamato -)
echo Hello World | nano - | less
Voglio modificare Hello -> Arrivederci nell'editor di testo.
Non deve essere con nano. Sono bloccato con la lettura nano di stdin ma mi impone di scrivere su un file (scrivendo su - crea un file chiamato -)
Risposte:
Il pacchetto moreutils ha un ottimo comando per farlo, chiamato vipe
. Dalla pagina man:
SYNOPSIS
command1 | vipe | command2
DESCRIPTION
vipe allows you to run your editor in the middle of a unix pipeline and
edit the data that is being piped between programs. Your editor will have
the full data being piped from command1 loaded into it, and when you close
it, that data will be piped into command2.
Per impostazione predefinita, questo utilizzerà il editor
comando, che di solito è solo un link simbolico all'editor della riga di comando predefinito. Puoi cambiarlo modificando il collegamento (usa update-alternatives
su sistemi basati su Debian) o usando la EDITOR
variabile ambientale. Ad esempio, potresti fare:
echo Hello World | EDITOR=nano vipe | less
Altrimenti, se il particolare editor di testo non supporta questo tipo di cose, penso che tu sia bloccato con la creazione manuale di un file temporaneo, la scrittura del file in quello, l'esecuzione dell'editor, l'inserimento del file nel resto della pipeline e rimozione del file temporaneo. Il vipe
comando prende praticamente cura di tutto questo. Questo è carino, ma il comando è raramente disponibile per impostazione predefinita.
L'editor di testo joe (aka Joe's Own Editor ) fa quello che vuoi.
Il comando echo "hello world" | joe - | less
funziona come previsto, sebbene abbia bisogno delle virgolette per qualche motivo.
Alcuni comandi (come gpg) producono un output visualizzato che non entra nella pipe. Questo corrompe la visualizzazione iniziale all'interno di joe, ma premendo ctrl + r - aggiorna - pulirai le cose.
Se tutto ciò che vuoi è sostituire "Ciao" con "Arrivederci" (o qualsiasi altra sostituzione di parole) puoi evitare la modifica manuale in un editor a favore dello strumento di ricerca e sostituzione automatica. Ad esempio "sed" può eseguire tali sostituzioni in questo modo:
echo Hello World | sed 's/Hello/Goodbye/' | less
Controlla "man sed" per maggiori dettagli.