המוזכרים בהם באופן מוזר "כאן מסמכי" אתן לך להשתמש בקלט / החוצה ניתוב מחדש בתוך סקריפטים Bash על לינוקס. הם דרך מצוינת להפוך פקודות אתה צריך לרוץ על מחשב מרוחק.
לכאן מסמכים
יש פקודות רבות לינוקס שניים או שלושה שמות מכתב. זה גם מה הוליד את הרעיון כי לינוקס היא קשה ללמוד ומלא פקודות מסתוריות. אבל אחד השמות הכי המוזרים לינוקס הוא לא אחד מאלה קצרים ולא פרשו. "הנה מסמכים" אינו מסמכים, והוא לא ממש ברור מה "כאן" מתייחס, בין אם.
הם קונסטרוקט אלמוני יחסית, אבל הם מועילים. כמובן, זה לינוקס, כך יש יותר מדרך אחת עור חתול. חלק מהפונקציונליות שמספקת כאן מסמכים ניתן לשכפל בדרכים אחרות. אלה שיטות החלופיות הן בדרך כלל יותר מסובכות. בתכנות או scripting, "יותר מסובך" פירושה גם "מועדים יותר באגים," וכי הקוד שלך הוא קשה יותר לשמור.
איפה כאן מסמכים באמת אקסל נמצאת האוטומציה של פקודות שאתה רוצה לשלוח למחשב מרוחק מחיבור הוקם מתוך תסריט. ביצוע החיבור קל, אבל ברגע החיבור נעשה, איך אתה "משאבה" הפקודות שלך מפני התסריט שלך לתוך המעטפת במחשב המרוחק? הנה מסמכים ינתנו לך לעשות את זה מאוד פשוט.
עקרונות יסוד של מסמכים כאן
ייצוג idiomatic של כאן נראה מסמך כזה:
COMMAND & lt; & lt; limit_string . . טֶקסט נתונים משתנה . . limit_string
-
פקודה
: זה יכול להיות כל פקודה לינוקס שמקבל קלט שהופנו מחדש. שים לב,
הֵדפקודה אינו מקבל קלט שהופנה מחדש . אם אתה צריך לכתוב על המסך, אתה יכול להשתמשחתולפקודה, אשר עושה . - & Lt; & lt; : מפעיל ניתוב מחדש.
- limit_string : זוהי תווית. זה יכול להיות כל מה שאתה רוצה, כל עוד הוא אינו מופיע ברשימת הנתונים שאתה הפניית אתה לתוך הפקודה. הוא משמש כדי לסמן את סופה של טקסט, נתונים, משתנים הרשימה.
- רשימת נתונים : רשימת הנתונים שתאכיל לפקודה. היא יכולה להכיל פקודות, טקסט, משתנה. תוכן רשימת הנתונים מוזנים לתוך השורה האחת הפקודה בכול פעם עד _limit_string הוא נתקל.
אתה בטח תראה דוגמה כאן מסמכים שהשימוש "EOF" כמו מחרוזת הגבול. איננו נותנים עדיפות בגישה. זה עובד, אבל "EOF" פירושו "סוף הקובץ." מלבד המקרה הנדיר שבו מסמך הביתה הוא הדבר האחרון בקובץ סקריפט, "EOF" נמצא בשימוש בטעות.
זה יגרום הסקריפטים הרבה יותר קריא אם אתה משתמש בחוט גבול המתייחס מה שאתה עושה. אם אתה שולח סדרה של פקודות למחשב מרוחק מעל
מעטפת מאובטחת
(SSH), מחרוזת גבול נקראת משהו כמו "_remote_commands" נראית לו הגיונית ביותר. אתה לא צריך להתחיל אותם עם קו תחתון "
_
" אופי. אנחנו עושים את זה כי זה סימנים אותם כמשהו יוצא הדופן בתסריט.
דוגמאות פשוטות
אתה יכול להשתמש כאן מסמכים בשורת הפקודה וב סקריפטים. כאשר אתה מקליד את הבאה בחלון מסוף, תראה "
& Gt;
" המשך קו הנחיה בכל פעם שאתה מכה 'Enter.' כאשר אתה מקליד את מחרוזת הגבול "_end_of_text" ולחץ "ENTER", ברשימת האתרים מועברת
חתול,
והם מוצגים בחלון הטרמינל.
חתול & lt; & lt; _end_of_text כיצד לחנוך סקירה Geek. LifeSavvy CloudSavvy IT MindBounce _end_of_text
זה לא הכי כדאי של תרגילים, אבל זה עושה ימחיש כי נשלח הפקודה עד הרשימה כול נתון נאספה מחרוזת הגבול הוא נתקלה. ה
חתול
הפקודה אינו מקבל קלט עד שתזין את המחרוזת גבול "_end_of_text" ולחץ על מקש "Enter".
אנחנו יכולים לעשות את אותו הדבר ב סקריפט. הקלד או להעתיק את דוגמת עורך, שמור את הקובץ בשם "heredoc-1.sh", ולסגור את העורך.
#! / Bin / bash חתול & lt; & lt; "_End_of_text" שם המשתמש שלך הוא: $ (Whoami) ספריית העבודה הנוכחית שלך היא: $ PWD הגירסה בש שנבחרה: $ BASH_VERSION _end_of_text
כפי שאתה בצעת את המאמר הזה, בכול פעם שאתה יוצר תסריט, עליך
להפוך אותו הפעלה
לפני שהוא יפעל. בכל מקרה,
להשתמש ב
chmod
פקודה
. להחליף את שמו של הכתב בכל דוגמה עבור שם הכתב המשמש כאן.
chmod + x heredoc-1.sh
סקריפט זה מכיל שני משתני סביבה,
$ PWD
ו
$ BASH_VERSION
. השמות משתנים הסביבה מוחלפים על ידי ערכי נתון שלהם ספריית העבודה הנוכחית ואת הגרסה של Bash-כאשר את התסריט מבוצע.
התסריט גם משתמש
החלפת פקוד
עַל
ה
מי אני
פקודה
. שמה של פקוד מוחלף התפוקה שלה. התפוקה מהתסריט כול כתוב לחלון הטרמינל ידי פקוד החתול. אנחנו להריץ את הסקריפט על ידי מכנה אותו בשמו:
./ heredoc-1.sh
אם תשנה את התסריט ואת לעטוף את מחרוזת הגבול בשורה הראשונה של כאן לתעד במרכאות"
-
", ברשימת הנתונים מועבר מילה במילה הפקודה כאן המסמך. שמות משתנים מוצגים במקום ערכי המשתנה, וכן החלפה הפקודה לא יתקיים.
#! / Bin / bash חתול & lt; & lt; - "_end_of_text" שם המשתמש שלך הוא: $ (Whoami) ספריית העבודה הנוכחית שלך היא: $ PWD הגירסה בש שנבחרה: $ BASH_VERSION _end_of_text
טיפול Tab דמוי
כברירת מחדל, תווי טאב ברשימה הנתונים יישמרו ולא בכתב לחלון הטרמינל. העתק שמור בדוגמה זו בשם "heredoc-2.sh." תעשה את זה הפעלה באמצעות
chmod
פקודה. ערוך את השורות מסוכסך לוודא כי יש להם אחד או שניים תווי טאב בתחילת השורה ולא שורה של מרחבים.
#! / Bin / bash
חתול & lt; & lt; _end_of_text
שם המשתמש שלך הוא: $ (Whoami)
ספריית העבודה הנוכחית שלך היא: $ PWD
הגירסה בש שנבחרה: $ BASH_VERSION
_end_of_text
./ heredoc-2.sh
הכרטיסיות נכתבות על חלון הטרמינל.
על ידי הוספת מקף "
-
" למפעיל הניתוב מחדש, בכאן המסמך יתעלם תווי טאב מובילים. שמור בדוגמה זו בשם "heredoc-3.sh" ולהפוך אותו ההפעלה.
#! / Bin / bash
חתול & lt; & lt; - _end_of_text
שם המשתמש שלך הוא: $ (Whoami)
ספריית העבודה הנוכחית שלך היא: $ PWD
הגירסה בש שנבחרה: $ BASH_VERSION
_end_of_text
./ heredoc-3.sh
הכרטיסיות הם התעלמו. זה אולי נראה טריוויאלי, אבל זה דרך מסודרת להתמודד עם כרטיסיות מובילות בשל סעיפים מוזחים סקריפטים.
לולאות ומבנים לוגיים אחרים בדרך כלל מסוכסך. אם שלך כאן מסמך הכלול קטע מוזח תסריט, באמצעות מקף "
-
" עם מסירת מפעילת ניתוב בעיות עיצוב הנגרמת על ידי תווי טאב המובילים.
#! / Bin / bash אם זה נכון; לאחר מכן חתול & lt; & lt; - _limit_string קו 1 עם כרטיסייה מובילה. קו 2 עם כרטיסייה מובילה. קו 3 עם כרטיסייה מובילה. _limit_string fi
מפנה אל קובץ
הפלט מהפקודה בשימוש עם המסמך כאן יכול להיות מנותב לקובץ. להשתמש ב "
& Gt;
"(ליצור את הקובץ) או "
& Gt; & gt;
"(ליצור את הקובץ אם הוא לא קיים, לצרף את הקובץ אם הוא עושה) מפעילי ניתוב מחדש
לאחר
מחרוזת הגבול בשורה הראשונה של המסמך כאן.
התסריט הזה הוא "heredoc-4.sh." זה יפנה את תפוקתו לקובץ טקסט שנקרא "session.txt."
#! / Bin / bash חתול & lt; & lt; _end_of_text & gt; session.txt שם המשתמש שלך הוא: $ (Whoami) ספריית העבודה הנוכחית שלך היא: $ PWD הגירסה בש שנבחרה: $ BASH_VERSION _end_of_text
./ heredoc-4.sh
חתול session.text
צנרת הפלט אל עוד פקודה
הפלט מהפקודה בשימוש במסמך כאן ניתן צייץ כקלט לפקודה אחרת. להשתמש
הצינור "
|
" מפעיל
לאחר
מחרוזת הגבול בשורה הראשונה של המסמך כאן. אנחנו הולכים צינור הפלט מהפקודה מסמך כאן,
חתול
, אל
sed
. אנחנו רוצים ל
להחליף את כל המופעים
של האות "A" עם האות "E".
שם זה סקריפט "heredoc-5.sh."
#! / Bin / bash חתול & lt; & lt; _end_of_text | sed 's / a / e / g' אֵיך ל גאק _end_of_text
. / Heredoc-5.sh
"גאק" מתוקן "חנון".
שליחת פרמטרים לתפקוד
הפקודה המשמשת עם מסמך כאן יכולה להיות פונקציה בתסריט.
סקריפט זה עובר כמה נתוני רכב לפונקציה. הפונקציה קוראת את הנתונים כאילו הוקלד על ידי משתמש. ערכי המשתנים מודפסים. שמור סקריפט זה כמו "heredoc-6.sh".
#! / Bin / bash
# הפונקציה set_car_details ()
set_car_details ()
{
קרא איפור
קרא דגם
קרא New_used.
קרא משלוח
קרא מיקום
קרא את המחיר
}
# מסמך כאן העובר את הנתונים כדי set_car_details ()
set_car_details & lt; & lt; _mars_rover_data.
נאס"א
התמדה רובר
בשימוש
לאסוף
מאדים (לונג, LAT) 77.451865,18.445161
2.2 מיליארד דולר
_mars_rover_data.
# לאחזר את פרטי הרכב
הד "לעשות: $ לעשות"
הד "דגם: $ דגם"
הד "חדש או בשימוש: $ new_used"
הד "משלוח או אוסף: $ delivery_collect"
הד "מיקום: $ מיקום"
ECHO "מחיר \ $: $ מחיר"
. / Heredoc-6.sh
פרטי הרכב נכתבים לחלון הטרמינל.
יצירת ושליחת דוא"ל
אנו יכולים להשתמש במסמך כאן כדי לחבר ולשלוח דוא"ל. שים לב שאנו יכולים לעבור פרמטרים לפיקוד מול מפעיל הפניה מחדש. אנחנו.
באמצעות לינוקס
דוֹאַר
פקודה
ל
שלח דוא"ל באמצעות מערכת הדואר המקומי
אל חשבון המשתמש הנקרא "דייב". ה
-
(נושא) אפשרות מאפשרת לנו לציין את הנושא לדוא"ל.
דוגמה זו צורות סקריפט "Heredoc-7.Sh".
#! / Bin / bash מאמר = "כאן מסמכים" מצב עומס העבודה של הדואר "דייב & LT; & LT; _דו"ח פרוייקט שם משתמש: $ (WOAMI) השלימה הקצאה: מאמר: $ מאמר _project_report
. / Heredoc-7.sh
אין פלט גלוי מסקריפט זה. אבל כאשר אנו בודקים את הדואר שלנו, אנו רואים כי הדוא"ל היה מורכב, נשלח, ומסר.
דואר
שימוש כאן מסמכים עם SSH
כאן מסמכים הם דרך חזקה ונוחה לבצע פקודות מסוימות במחשב מרוחק לאחר חיבור SSH הוקם. אם הגדרת מפתחות SSH בין שני המחשבים, תהליך ההתחברות יהיה אוטומטי לחלוטין. בדוגמה מהירה ומלוכלכת זו, תתבקש להזין את הסיסמה עבור חשבון המשתמש במחשב המרוחק.
סקריפט זה הוא "heredoc-8.sh". אנחנו הולכים להתחבר למחשב מרוחק שנקרא "מחשב מרחוק". חשבון המשתמש נקרא "דייב". אנו משתמשים ב-
-
(השבת את ההקצאה Pseudo-terminal) אפשרות כי אנחנו לא צריכים מסוף פסאודו אינטראקטיבי להיות מוקצה לנו.
ב "לעשות קצת עבודה כאן" קטע של התסריט, אנחנו יכולים לעבור רשימה של פקודות, ואלה יבוצעו על המחשב המרוחק. כמובן, אתה יכול פשוט להתקשר סקריפט שהיה במחשב מרוחק. התסריט המרוחק יכול להחזיק את כל הפקודות והשגרות שברצונך להוציא להורג.
כל זה script-heredoc-8.Sh - הולך לעשות הוא לעדכן יומן חיבור במחשב המרוחק. חשבון המשתמש חותמת זמן ותאריך נרשמים לקובץ טקסט.
#! / Bin / bash ssh -t [email protected] & lt; & lt; _remote_commands. # לעשות קצת עבודה כאן # עדכון חיבור יומן ECHO $ משתמש "-" $ (תאריך) & GT; & GT; /home/dave/conn_log/script.log. _remote_commands
כאשר אנו מפעילים את הפקודה, אנו מתבקשים להסרה עבור החשבון על מְרוּחָק מַחשֵׁב.
. / Heredoc-8.Sh
מידע כלשהו על המחשב המרוחק מוצג, ואנחנו מוחזרים לשורת הפקודה.
על ה
מְרוּחָק
מחשב, אנו יכולים להשתמש
חתול
כדי לבדוק את יומן החיבור:
חתול conn_log / script.log
כל חיבור מופיע עבורנו.
קָשׁוּר: כיצד ליצור ולהתקין מפתחות SSH מתוך פגז לינוקס
שם מוזר, תכונות מסודרות
כאן מסמכים הם quirky אבל חזק, במיוחד כאשר נעשה שימוש כדי לשלוח פקודות למחשב מרוחק. זה יהיה עניין פשוט כדי לתסריט שגרת גיבוי באמצעות
rsync
. התסריט יכול להתחבר למחשב המרוחק, לבדוק את שטח האחסון הנותר, ולשלוח דוא"ל מתריע אם החלל נעשה נמוך.
קָשׁוּר: כיצד לגבות את מערכת לינוקס שלך עם rsync