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

Spisu treści:

Anonim

Podczas pisania skryptów powłoki może zaistnieć sytuacja, w której trzeba przekazać wieloliniowy blok tekstu lub kodu do komendy interaktywnej, takiej jak tee , cat lub sftp .

W Bash i innych powłokach, takich jak Zsh, dokument Here (Heredoc) jest rodzajem przekierowania, który pozwala przekazać wiele wierszy danych wejściowych do polecenia.

Składnia pisania HereDoc ma następującą postać:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Pierwszy wiersz rozpoczyna się opcjonalnym poleceniem, po którym następuje specjalny operator przekierowania << i identyfikator rozgraniczający.
    • Możesz użyć dowolnego łańcucha jako identyfikatora rozgraniczającego, najczęściej używane są EOF lub END. Jeśli identyfikator rozgraniczający nie jest cytowany, powłoka zastąpi wszystkie zmienne, polecenia i znaki specjalne przed przekazaniem wierszy dokumentu tutaj do polecenia. znak minus do operatora przekierowania <<- spowoduje, że wszystkie wiodące znaki tabulacji zostaną zignorowane. Pozwala to na użycie wcięcia podczas pisania tutaj dokumentów w skryptach powłoki. Wiodące białe znaki nie są dozwolone, tylko tabulator.
    Blok dokumentu może zawierać ciągi znaków, zmienne, polecenia i dowolne inne dane wejściowe. Ostatni wiersz kończy się identyfikatorem rozgraniczającym. Białe spacje przed ogranicznikiem są niedozwolone.

Podstawowe przykłady Heredoc

W tej sekcji przyjrzymy się kilku podstawowym przykładom używania heredoc.

Heredoc jest najczęściej używany w połączeniu z poleceniem cat.

W poniższym przykładzie przekazujemy dwa wiersze tekstu zawierającego zmienną środowiskową i polecenie cat za pomocą dokumentu here.

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

Jak widać z danych wyjściowych poniżej, zmienna i dane wyjściowe polecenia są podstawiane:

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

Zobaczmy, co się stanie, jeśli ogranicznik zostanie ujęty w pojedyncze lub podwójne cudzysłowy.

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

Można zauważyć, że gdy cytowany jest separator, interpretacja parametrów nie jest wykonywana, a powłoka zastępuje polecenia.

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.

Zamiast wyświetlać dane wyjściowe na ekranie, możesz przekierować je do pliku za pomocą operatorów > , >> .

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

Jeśli plik.txt nie istnieje, zostanie utworzony. Podczas używania > plik zostanie zastąpiony, a >> dołączy wyjście do pliku.

Wejście heredoc może być również przesyłane potokowo. W poniższym przykładzie polecenie sed zastąpi wszystkie wystąpienia znaku l e :

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

Heeeo Wored

Aby zapisać dane potokowe w pliku:

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

Używanie Heredoc z SSH

Korzystanie z Heredoc jest jednym z najwygodniejszych i najłatwiejszych sposobów wykonywania wielu poleceń w systemie zdalnym przez SSH.

Używając niecytowanego separatora upewnij się, że nie używasz wszystkich zmiennych, poleceń i znaków specjalnych, w przeciwnym razie będą one interpolowane lokalnie:

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

Możesz także skonfigurować uwierzytelnianie oparte na kluczu SSH i połączyć się z serwerami Linux bez wprowadzania hasła.

Wniosek

W tym przewodniku nauczyłeś się, czym jest heredoc i jak go używać w skryptach powłoki.

terminal bash