Android

Bash heredoc

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

Obsah:

Anonim

Při psaní shellových skriptů můžete být v situaci, kdy budete muset předat víceřádkový blok textu nebo kódu interaktivnímu příkazu, jako je tee , cat nebo sftp .

V Bash a dalších skořápkách, jako je Zsh, je dokument Here (Heredoc) typ přesměrování, které vám umožní předat více řádků vstupu příkazu.

Syntaxe psaní HereDoc má následující podobu:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • První řádek začíná volitelným příkazem, za nímž následuje speciální operátor přesměrování << a oddělovací identifikátor.
    • Jako oddělovací identifikátor můžete použít libovolný řetězec, nejčastěji používané jsou EOF nebo END.If je oddělovací identifikátor nekotován, shell před výměnou řádků zde dokumentu do příkazu nahradí všechny proměnné, příkazy a speciální znaky. znaménko mínus operátorovi přesměrování <<- způsobí, že budou ignorovány všechny hlavní znaky záložky. To vám umožní použít odsazení při psaní zde-dokumentů v shellových skriptech. Hlavní znaky mezery nejsou povoleny, pouze karta.
    Blok dokumentu zde může obsahovat řetězce, proměnné, příkazy a jakýkoli jiný typ vstupu. Poslední řádek končí oddělovačem. Prázdné místo před oddělovačem není povoleno.

Základní příklady Heredoc

V této části se podíváme na některé základní příklady, jak používat heredoc.

Heredoc se nejčastěji používá v kombinaci s příkazem cat.

V následujícím příkladu předáváme dva řádky textu obsahující proměnnou prostředí a příkaz ke cat pomocí dokumentu zde.

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

Jak je vidět z výstupu níže, jsou nahrazeny jak proměnná, tak příkazový výstup:

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

Uvidíme, co se stane, pokud oddělovač uzavřeme do jednoduchých nebo dvojitých uvozovek.

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

Můžete si všimnout, že když je oddělovač citován, shelly neprovádí žádné rozšíření parametrů ani nahrazování příkazů.

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

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

Line with a leading tab.

Místo zobrazení výstupu na obrazovce jej můžete přesměrovat do souboru pomocí operátorů > , >> .

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

Pokud file.txt neexistuje, bude vytvořen. Při použití > bude soubor přepsán, zatímco >> připojí výstup k souboru.

Heredoc vstup může být také potrubím. V následujícím příkladu příkaz sed nahradí všechny instance znaku l e :

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

Heeeo Wored

Chcete-li zapsat potrubní data do souboru:

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

Používání Heredoc s SSH

Použití Heredoc je jedním z nejpohodlnějších a nejjednodušších způsobů provádění více příkazů na vzdáleném systému přes SSH.

Pokud používáte oddělovač bez uvozovek, ujistěte se, že jste unikli všem proměnným, příkazům a speciálním znakům, jinak budou lokálně interpolovány:

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

Můžete také nastavit autentizaci pomocí klíče SSH a připojit se k serverům Linux bez zadání hesla.

Závěr

V této příručce jste se dozvěděli, co je heredoc a jak je používat ve svých shellových skriptech.

bash terminál