GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Heredoc

Quando scrivi script di shell potresti trovarti in una situazione in cui devi passare un blocco di testo o codice multilinea a un comando interattivo, come tee , cat o sftp .

In Bash e in altre shell come Zsh, un documento Here (Heredoc) è un tipo di reindirizzamento che ti consente di passare più righe di input a un comando.

La sintassi per scrivere HereDoc assume la forma seguente:

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER
  • La prima riga inizia con un comando opzionale seguito dall'operatore di reindirizzamento speciale << e l'identificatore di delimitazione.
    • Puoi utilizzare qualsiasi stringa come identificatore di delimitazione, i più comunemente usati sono EOF o END.
    • Se l'identificatore di delimitazione non è tra virgolette, la shell sostituirà tutte le variabili, i comandi ei caratteri speciali prima di passare le righe here-document al comando.
    • Aggiungere un segno meno all'operatore di reindirizzamento <<- , tutti i caratteri di tabulazione iniziali verranno ignorati. Questo ti permette di usare l'indentazione quando scrivi qui-documenti negli script della shell. Non sono consentiti spazi iniziali iniziali, solo tabulazione.
  • Il blocco here-document può contenere stringhe, variabili, comandi e qualsiasi altro tipo di input.
  • L'ultima riga termina con l'identificatore di delimitazione. Lo spazio bianco davanti al delimitatore non è consentito.

Esempi di base di Heredoc #

In questa sezione, esamineremo alcuni esempi di base di come utilizzare heredoc.

Heredoc è spesso usato in combinazione con il comando cat.

Nell'esempio seguente, stiamo passando due righe di testo contenenti una variabile di ambiente e un comando a cat utilizzando un documento qui.

cat << EOF
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Come puoi vedere dall'output di seguito, vengono sostituiti sia l'output della variabile che quello del comando:

The current working directory is: /home/linuxize
You are logged in as: linuxize

Vediamo cosa succede se racchiudiamo il delimitatore tra virgolette singole o doppie.

cat <<- "EOF"
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Puoi notare che quando il delimitatore è quotato, la shell non esegue l'espansione dei parametri e la sostituzione dei comandi.

The current working directory is: $PWD
You are logged in as: $(whoami)

Se stai usando un heredoc all'interno di un'istruzione o di un ciclo, usa il <<- operazione di reindirizzamento che ti permette di indentare il tuo codice.

if true; then
    cat <<- EOF
    Line with a leading tab.
    EOF
fi
Line with a leading tab.

Invece di visualizzare l'output sullo schermo, puoi reindirizzarlo a un file utilizzando il > , >> operatori.

cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Se il file.txt non esiste verrà creato. Quando si utilizza > il file verrà sovrascritto, mentre il >> aggiungerà l'output al file.

L'input heredoc può anche essere reindirizzato. Nell'esempio seguente il sed il comando sostituirà tutte le istanze di l carattere con e :

cat <<'EOF' |  sed 's/l/e/g'
Hello
World
EOF
Heeeo
Wored

Per scrivere i dati convogliati in un file:

cat <<'EOF' |  sed 's/l/e/g' > file.txt
Hello
World
EOF

Utilizzo di Heredoc con SSH #

L'uso di Heredoc è uno dei modi più convenienti e semplici per eseguire più comandi su un sistema remoto tramite SSH.

Quando usi un delimitatore senza virgolette assicurati di sfuggire a tutte le variabili, i comandi e i caratteri speciali, altrimenti verranno interpolati localmente:

ssh -T [email protected] << EOF
echo "The current local working directory is: $PWD"
echo "The current remote working directory is: \$PWD"
EOF
The current local working directory is: /home/linuxize
The current remote working directory is: /home/user

Potresti anche voler configurare un'autenticazione basata su chiave SSH e connetterti ai tuoi server Linux senza inserire una password.

Conclusione #

In questa guida hai imparato cos'è heredoc e come usarlo negli script della shell.

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. bash sh - comando non trovato

  2. Bash - Comando data e spazio

  3. Esegui il comando bash sulla pipeline jenkins

  4. Bash se su una sola riga

  5. Come posso controllare i caratteri letterali di una stringa di comando bash?

Comando della cronologia in Linux (Cronologia di Bash)

Comando di uscita Bash e codici di uscita

Comando Bash printf

Bash Heredoc Tutorial per principianti

Script Bash(II)

Scripting Bash(III)