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

Πίνακας περιεχομένων:

Anonim

Όταν γράφετε σενάρια κελύφους, μπορεί να βρίσκεστε σε μια κατάσταση όπου πρέπει να περάσετε ένα πολύπλευρο μπλοκ κειμένου ή κώδικα σε μια διαδραστική εντολή, όπως το tee , cat ή sftp .

Στο Bash και σε άλλα κοχύλια όπως το Zsh, ένα έγγραφο Here (Heredoc) είναι ένας τύπος ανακατεύθυνσης που σας επιτρέπει να περάσετε πολλές γραμμές εισόδου σε μια εντολή.

Η σύνταξη της σύνταξης του HereDoc έχει την ακόλουθη μορφή:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Η πρώτη γραμμή ξεκινά με μια προαιρετική εντολή που ακολουθείται από τον ειδικό χειριστή ανακατεύθυνσης << και το αναγνωριστικό οριοθέτησης.
    • Μπορείτε να χρησιμοποιήσετε οποιαδήποτε συμβολοσειρά ως αναγνωριστικό οριοθέτησης, τα πιο συνηθισμένα χρησιμοποιούνται EOF ή END.Αν το αναγνωριστικό οριοθέτησης είναι unquoted, το κέλυφος θα αντικαταστήσει όλες τις μεταβλητές, τις εντολές και τους ειδικούς χαρακτήρες πριν περάσει τις γραμμές του παρόντος εγγράφου στην εντολή. με το σύμβολο μείον στον χειριστή ανακατεύθυνσης <<- , θα αγνοήσει όλους τους χαρακτήρες της καρτέλας. Αυτό σας επιτρέπει να χρησιμοποιήσετε την εσοχή όταν γράφετε εδώ-έγγραφα σε δέσμες ενεργειών κελύφους. Δεν επιτρέπονται οι κορυφαίοι χαρακτήρες κενών διαστημάτων, μόνο στην καρτέλα.
    Το μπλοκ του παρόντος εγγράφου μπορεί να περιέχει συμβολοσειρές, μεταβλητές, εντολές και κάθε άλλο τύπο εισόδου. Η τελευταία γραμμή τελειώνει με το αναγνωριστικό οριοθέτησης. Ο λευκός χώρος μπροστά από τον οριοθέτη δεν επιτρέπεται.

Βασικά Παραδείγματα Heredoc

Σε αυτή την ενότητα θα δούμε μερικά βασικά παραδείγματα για τον τρόπο χρήσης του heredoc.

Το Heredoc χρησιμοποιείται συχνότερα σε συνδυασμό με την εντολή γάτας.

Στο ακόλουθο παράδειγμα, διαβιβάζουμε δύο γραμμές κειμένου που περιέχουν μια μεταβλητή περιβάλλοντος και μια εντολή στη cat χρησιμοποιώντας εδώ ένα έγγραφο.

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

Όπως μπορείτε να δείτε από την παρακάτω έξοδο, αντικαθίστανται τόσο η μεταβλητή όσο και η έξοδος εντολών:

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

Ας δούμε τι θα συμβεί αν περικλείσουμε τον απομεμακρυστή σε απλά ή διπλά εισαγωγικά.

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

Μπορείτε να παρατηρήσετε ότι όταν αναγράφεται ο οριοθέτης δεν γίνεται επέκταση παραμέτρων και αντικατάσταση εντολών από το κέλυφος.

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.

Αντί να εμφανίσετε την έξοδο στην οθόνη, μπορείτε να την ανακατευθύνετε σε ένα αρχείο χρησιμοποιώντας τους χειριστές > , >> .

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

Αν το file.txt δεν υπάρχει, θα δημιουργηθεί. Όταν χρησιμοποιείτε > το αρχείο θα αντικατασταθεί, ενώ το >> θα προσαρτήσει την έξοδο στο αρχείο.

Η είσοδος heredoc μπορεί επίσης να διοχετευτεί. Στο ακόλουθο παράδειγμα, η εντολή sed θα αντικαταστήσει όλες τις εμφανίσεις του χαρακτήρα l με e :

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

Heeeo Wored

Για να γράψετε τα δεδομένα που μεταφέρονται σε ένα αρχείο:

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

Χρησιμοποιώντας τον Heredoc με SSH

Η χρήση του Heredoc είναι ένας από τους πιο βολικούς και ευκολότερους τρόπους εκτέλεσης πολλαπλών εντολών σε απομακρυσμένο σύστημα μέσω SSH.

Όταν χρησιμοποιείτε unquoted delimiter σιγουρευτείτε ότι ξεφύγετε από όλες τις μεταβλητές, τις εντολές και τους ειδικούς χαρακτήρες διαφορετικά θα παρεμβληθούν τοπικά:

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

Μπορεί επίσης να θέλετε να ρυθμίσετε έναν έλεγχο ταυτότητας βασισμένο σε κλειδί SSH και να συνδεθείτε στους διακομιστές Linux χωρίς να εισάγετε κωδικό πρόσβασης.

συμπέρασμα

Σε αυτόν τον οδηγό, έχετε μάθει τι είναι heredoc και πώς να το χρησιμοποιήσετε στα heredoc σας.

bash terminal