אנדרואיד

Bash heredoc

תוכן עניינים:

Anonim

כשאתה כותב סקריפטים של מעטפת אתה עלול להיות במצב שאתה צריך להעביר גוש טקסט או קוד רב שכבתי לפקודה אינטראקטיבית, כגון tee , cat או sftp .

בבאש ופגזים אחרים כמו Zsh, מסמך Here (Heredoc) הוא סוג של ניתוב מחדש המאפשר לך להעביר מספר שורות קלט לפקודה.

התחביר של כתיבת HereDoc לובש את הצורה הבאה:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • השורה הראשונה מתחילה בפקודה אופציונלית ואחריה מפעיל ההפניה המיוחד << ומזהה התוחם.
    • אתה יכול להשתמש בכל מחרוזת כמזהה תוחם, הנפוצה ביותר היא EOF או END. אם מזהה התוחם אינו מצוטט, הקליפה תחליף את כל המשתנים, הפקודות והתווים המיוחדים לפני שתעביר את שורות המסמך כאן לפקודה. סימן מינוס למפעיל ההפניה <<- , יגרום להתעלמות מכל תווי הכרטיסיות המובילות. זה מאפשר לך להשתמש בכניסה ככתיבת מסמכים כאן בסקריפטים של מעטפת. חל איסור על תווים מרווחים מובילים, רק בכרטיסייה.
    חסימת המסמך כאן יכולה להכיל מחרוזות, משתנים, פקודות וכל סוג אחר של קלט. השורה האחרונה מסתיימת במזהה התוחם. חלל לבן מול התוחם אסור.

דוגמאות הרדוק בסיסיות

בחלק זה, נסקור כמה דוגמאות בסיסיות לשימוש ב- 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 לא קיים הוא ייווצר. בעת שימוש ב- > הקובץ יוחלף, בעוד ש- >> יוסיף את הפלט לקובץ.

ניתן לצרף גם את קלט ההרדוק. בדוגמה הבאה הפקודה 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.

בעת שימוש במתחם לא מצוטט ודא שאתה בורח מכל המשתנים, הפקודות והתווים המיוחדים, אחרת הם יוחזרו באופן מקומי:

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 וכיצד להשתמש בו בתסריטים של הקונכיות שלך.

מסוף bash