כאן מסמכים
בדקנו שתי שיטות שונות להפקת הטקסט שלנו, שתיהן באמצעות ה הד קומ-
מנד. יש דרך שלישית שנקראת א כאן מסמך or כאן תסריט. מסמך כאן הוא צורה נוספת של הפניית קלט/פלט מחדש שבה אנו מטמיעים גוף טקסט בסקריפט שלנו ומזינים אותו לקלט הסטנדרטי של פקודה. זה עובד ככה:
הפקודה << אסימון
טֶקסט
אסימון
איפה הפקודה הוא שם הפקודה שמקבלת קלט סטנדרטי ו אסימון היא מחרוזת המשמשת לציון סוף הטקסט המוטבע. נשנה את הסקריפט שלנו כך שישתמש במסמך כאן:
#! / bin / bash
# תוכנית לפלט דף מידע מערכת
TITLE="דוח מידע מערכת עבור $HOSTNAME" CURRENT_TIME=$(תאריך +"%x %r %Z")
TIMESTAMP="נוצר $CURRENT_TIME, על ידי $USER"
חתול << _EOF_
$TITLE
$TITLE
$TIMESTAMP
_EOF_
#! / bin / bash
# תוכנית לפלט דף מידע מערכת
TITLE="דוח מידע מערכת עבור $HOSTNAME" CURRENT_TIME=$(תאריך +"%x %r %Z")
TIMESTAMP="נוצר $CURRENT_TIME, על ידי $USER"
חתול << _EOF_
$TITLE
$TITLE
$TIMESTAMP
_EOF_
במקום להשתמש הד, הסקריפט שלנו משתמש כעת חתול ומסמך כאן. המיתר _EOF_ (כלומר "End Of File", מוסכמה נפוצה) נבחר כאסימון, ומסמן את סוף הטקסט המוטבע. שימו לב שהאסימון חייב להופיע לבד ושאסור להיות רווחים נגררים על הקו.
אז מה היתרון בשימוש במסמך כאן? זה בעיקר כמו הד, אלא שבברירת מחדל, מרכאות בודדות וכפולות במסמכים כאן מאבדות את המשמעות המיוחדת שלהן לקליפה. הנה דוגמה של שורת פקודה:
[me@linuxbox ~]$ foo="כמה טקסט"
[me@linuxbox ~]$ חתול << _EOF_
> $foo
[me@linuxbox ~]$ foo="כמה טקסט"
[me@linuxbox ~]$ חתול << _EOF_
> $foo
> "$פו"
> '$foo'
> \$פו
> _EOF_ טקסט כלשהו "טקסט כלשהו" "טקסט כלשהו"
$foo
> "$פו"
> '$foo'
> \$פו
> _EOF_ טקסט כלשהו "טקסט כלשהו" "טקסט כלשהו"
$foo
כפי שאנו יכולים לראות, הקליפה אינה שמה לב למרכאות. זה מתייחס אליהם כאל דמויות רגילות. זה מאפשר לנו להטביע ציטוטים בחופשיות בתוך מסמך כאן. זה עשוי להתברר כשימושי עבור תוכנית הדוחות שלנו.
כאן ניתן להשתמש במסמכים עם כל פקודה שמקבלת קלט סטנדרטי. בדוגמה זו, אנו משתמשים במסמך כאן כדי להעביר סדרה של פקודות ל- FTP תוכנית על מנת לאחזר קובץ משרת FTP מרוחק:
#! / bin / bash
# סקריפט לאחזור קובץ דרך FTP FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n << _EOF_ פתח את $FTP_SERVER
משתמש אנונימי me@linuxbox cd $FTP_PATH
שירים
קבל $REMOTE_FILE ביי
_EOF_
ls -l $REMOTE_FILE
#! / bin / bash
# סקריפט לאחזור קובץ דרך FTP FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n << _EOF_ פתח את $FTP_SERVER
משתמש אנונימי me@linuxbox cd $FTP_PATH
שירים
קבל $REMOTE_FILE ביי
_EOF_
ls -l $REMOTE_FILE
אם נשנה את אופרטור ההפניה מ-"<<" ל-"<<-", המעטפת תתעלם מתווי כרטיסיות מובילים במסמך כאן. זה מאפשר הזחה של מסמך כאן, מה שיכול לשפר את הקריאה:
#! / bin / bash
# סקריפט לאחזור קובץ דרך FTP FTP_SERVER=ftp.nl.debian.org
#! / bin / bash
# סקריפט לאחזור קובץ דרך FTP FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n <<- _EOF_ פתח את $FTP_SERVER
משתמש אנונימי me@linuxbox cd $FTP_PATH
שירים
קבל $REMOTE_FILE ביי
_EOF_
ls -l $REMOTE_FILE
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n <<- _EOF_ פתח את $FTP_SERVER
משתמש אנונימי me@linuxbox cd $FTP_PATH
שירים
קבל $REMOTE_FILE ביי
_EOF_
ls -l $REMOTE_FILE