Devo incollare un codice bash su più righe nel terminale, ma ogni volta che lo faccio, ogni riga viene eseguita come comando separato non appena viene incollata.
Risposte:
Sono davvero sorpreso che questa risposta non sia offerta qui, ero alla ricerca di una soluzione a questa domanda e penso che questo sia l'approccio più semplice e più flessibile / indulgente ...
Se desideri incollare più righe da un sito Web / editor di testo / ecc., In bash, indipendentemente dal fatto che si tratti di comandi per riga o di una funzione o dell'intero script ... inizia semplicemente con a (
e termina con a )
e Invio, come nell'esempio seguente:
Se avessi il seguente blob
function hello {
echo Hello!
}
hello
Puoi incollare e verificare in un terminale usando bash:
Iniziare con (
Incollare il testo e premere Invio (per renderlo carino) ... oppure no
Finendo con a )
e premendo Invio
Esempio:
imac:~ home$ ( function hello {
> echo Hello!
> }
> hello
> )
Hello!
imac:~ home$
Il testo incollato continua automaticamente con un anteposto >
per ogni riga. Ho testato con più righe con comandi per riga, funzioni e interi script. Spero che questo aiuti gli altri a risparmiare tempo!
Se premi il C-x C-e
comando che aprirà il tuo editor predefinito che è stato definito .bashrc
, dopodiché potrai utilizzare tutte le potenti funzionalità del tuo editor. Quando salvi ed esci, le linee aspetteranno il tuo ingresso.
Se vuoi definire il tuo editor, scrivi semplicemente per Ex. EDITOR=emacs -nw
o EDITOR=vi
all'interno di~/.bashrc
emacs
e vi
fare) e al salvataggio e all'uscita i comandi vengono eseguiti immediatamente .
Oltre alla barra rovesciata, se una riga termina con |
o &&
o ||
, verrà continuata sulla riga successiva.
Aggiungi parentesi attorno alle linee. Esempio:
$ (
sudo apt-get update
dokku apps
dokku ps:stop APP # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
dokku ps:rebuildall # rebuilds all applications
)
(
, anche le parentesi graffe {
funzionerebbero allo stesso modo nell'esempio sopra
Un'altra possibilità:
bash << EOF
echo "Hello"
echo "World"
EOF
iTerm gestisce perfettamente il comando su più righe, salva il comando su più righe come un comando, quindi possiamo usare Cmd
+ Shift
+ ;
per navigare nella cronologia.
Controlla altri suggerimenti su iTerm in Lavorare efficacemente con iTerm
Provare
out=$(cat)
Quindi incolla le linee e premi Ctrl-D (inserisci il carattere EOF). Tutti gli input fino a Ctrl-D verranno reindirizzati allo stdout di cat.
$ out=$(cat) && eval "$out"
. premi invio dopo l'ultima riga, quindi CTRL + D come suggerito sopra.