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

Innehållsförteckning:

Anonim

När du skriver skalskript kanske du befinner dig i en situation där du behöver skicka ett multiline block med text eller kod till ett interaktivt kommando, som tee , cat eller sftp .

I Bash och andra skal som Zsh är ett Here-dokument (Heredoc) en typ av omdirigering som låter dig skicka flera inmatningsrader till ett kommando.

Syntaxen för att skriva HereDoc har följande form:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Den första raden börjar med ett valfritt kommando följt av den speciella omdirigeringsoperatören << och avgränsningsidentifieraren.
    • Du kan använda vilken sträng som en avgränsningsidentifierare, de vanligaste är EOF eller END. Om avgränsningsidentifieraren inte är citerad, kommer skalet att ersätta alla variabler, kommandon och specialtecken innan du överför här-dokumentraderna till kommandot. minustecken till omdirigeringsoperatören <<- , kommer att leda till att alla ledande tabbtecken ignoreras. Detta gör att du kan använda intryck när du skriver här-dokument i skalskript. Ledande whitespace-tecken är inte tillåtna, bara fliken.
    Här-dokumentblocket kan innehålla strängar, variabler, kommandon och annan ingångstyp. Den sista raden slutar med avgränsningsidentifieraren. Vitt utrymme framför avgränsaren är inte tillåtet.

Grundläggande Heredoc-exempel

I det här avsnittet kommer vi att titta på några grundläggande exempel på hur man använder heredoc.

Heredoc används oftast i kombination med kattkommandot.

I följande exempel passerar vi två rader text som innehåller en miljövariabel och ett kommando till cat med ett här-dokument.

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

Som du kan se från utgången nedan ersätts både variabeln och kommandoutputen:

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

Låt oss se vad som kommer att hända om vi omsluter avgränsaren i enstaka eller dubbla citat.

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

Du kan märka att när avgränsaren citeras görs ingen parameterutvidgning och kommandosubstitution av skalet.

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.

Istället för att visa utgången på skärmen kan du omdirigera den till en fil med > , >> -operatörerna.

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

Om filen.txt inte finns kommer den att skapas. När du använder > kommer filen att skrivas över, medan >> lägger till utgången till filen.

Heredoc-ingången kan också ledas. I följande exempel ersätter sed kommandot alla förekomster av l karaktären med e :

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

Heeeo Wored

Så här skriver du pipedata till en fil:

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

Använda Heredoc med SSH

Att använda Heredoc är ett av de mest bekväma och enklaste sätten att köra flera kommandon på ett fjärrsystem över SSH.

När du använder obegränsad avgränsare, se till att du flyr från alla variabler, kommandon och specialtecken annars kommer de att interpoleras lokalt:

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

Du kanske också vill ställa in en SSH-nyckelbaserad autentisering och ansluta till dina Linux-servrar utan att ange ett lösenord.

Slutsats

I den här guiden har du lärt dig vad som är heredoc och hur du använder det i dina skalskript.

bash terminal