<ก่อนหน้านี้ | เนื้อหา | ถัดไป>
เอกสารที่นี่
เราได้ดูวิธีการแสดงข้อความของเราสองวิธีที่แตกต่างกัน ทั้งการใช้ เสียงสะท้อน คอม-
อาณัติ มีวิธีที่สามที่เรียกว่า ที่นี่เอกสาร or นี่สคริปต์. เอกสารที่นี่เป็นรูปแบบเพิ่มเติมของการเปลี่ยนเส้นทาง I/O ซึ่งเราฝังเนื้อความของข้อความลงในสคริปต์ของเราและป้อนลงในอินพุตมาตรฐานของคำสั่ง มันทำงานเช่นนี้:
คำสั่ง << โทเค็น
ข้อความ
โทเค็น
ที่ไหน คำสั่ง เป็นชื่อของคำสั่งที่รับอินพุตมาตรฐานและ โทเค็น เป็นสตริงที่ใช้ระบุจุดสิ้นสุดของข้อความที่ฝังไว้ เราจะแก้ไขสคริปต์ของเราเพื่อใช้เอกสารที่นี่:
#! / bin / ทุบตี
# โปรแกรมออกหน้าข้อมูลระบบ
TITLE="รายงานข้อมูลระบบสำหรับ $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="สร้าง $CURRENT_TIME โดย $USER"
แมว << _EOF_
$TITLE
$TITLE
$TIMESTAMP
_อีโอเอฟ_
#! / bin / ทุบตี
# โปรแกรมออกหน้าข้อมูลระบบ
TITLE="รายงานข้อมูลระบบสำหรับ $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="สร้าง $CURRENT_TIME โดย $USER"
แมว << _EOF_
$TITLE
$TITLE
$TIMESTAMP
_อีโอเอฟ_
แทนที่จะใช้ เสียงสะท้อนตอนนี้สคริปต์ของเราใช้ แมว และเอกสารที่นี่ สตริง _อีโอเอฟ_ (หมายถึง "สิ้นสุดไฟล์" ซึ่งเป็นแบบแผนทั่วไป) ได้รับเลือกให้เป็นโทเค็น และทำเครื่องหมายจุดสิ้นสุดของข้อความที่ฝังไว้ โปรดทราบว่าโทเค็นต้องปรากฏตามลำพังและต้องไม่มีช่องว่างต่อท้ายบรรทัด
ข้อดีของการใช้เอกสารที่นี่คืออะไร? ส่วนใหญ่จะเหมือนกับ เสียงสะท้อนยกเว้นว่าโดยค่าเริ่มต้น เครื่องหมายคำพูดเดี่ยวและคู่ภายในเอกสารนี้จะสูญเสียความหมายพิเศษไปในเชลล์ นี่คือตัวอย่างบรรทัดคำสั่ง:
[me@linuxbox ~]$ foo="ข้อความบางส่วน"
[me@linuxbox ~]$ แมว << _EOF_
> $ฟู
[me@linuxbox ~]$ foo="ข้อความบางส่วน"
[me@linuxbox ~]$ แมว << _EOF_
> $ฟู
> "$foo"
> '$foo'
> \$ฟู
> _อีโอเอฟ_ ข้อความบางส่วน "ข้อความบางส่วน" 'ข้อความบางส่วน'
$ฟู
> "$foo"
> '$foo'
> \$ฟู
> _อีโอเอฟ_ ข้อความบางส่วน "ข้อความบางส่วน" 'ข้อความบางส่วน'
$ฟู
อย่างที่เราเห็น เปลือกไม่สนใจเครื่องหมายคำพูด ถือว่าพวกเขาเป็นตัวละครธรรมดา ซึ่งช่วยให้เราสามารถฝังเครื่องหมายคำพูดได้อย่างอิสระภายในเอกสารที่นี่ สิ่งนี้อาจเป็นประโยชน์สำหรับโปรแกรมรายงานของเรา
สามารถใช้เอกสารที่นี่กับคำสั่งใดๆ ที่ยอมรับอินพุตมาตรฐาน ในตัวอย่างนี้ เราใช้เอกสาร here เพื่อส่งชุดคำสั่งไปยัง FTP โปรแกรมตามลำดับเพื่อดึงไฟล์จากเซิร์ฟเวอร์ FTP ระยะไกล:
#! / bin / ทุบตี
# สคริปต์เพื่อดึงไฟล์ผ่าน 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 บาย
_อีโอเอฟ_
ls -l $REMOTE_FILE
#! / bin / ทุบตี
# สคริปต์เพื่อดึงไฟล์ผ่าน 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 บาย
_อีโอเอฟ_
ls -l $REMOTE_FILE
หากเราเปลี่ยนตัวดำเนินการเปลี่ยนเส้นทางจาก "<<" เป็น "<<-" เชลล์จะละเว้นอักขระแท็บนำหน้าในเอกสารที่นี่ ซึ่งช่วยให้เยื้องเอกสารที่นี่ ซึ่งสามารถปรับปรุงความสามารถในการอ่าน:
#! / bin / ทุบตี
# สคริปต์เพื่อดึงไฟล์ผ่าน FTP FTP_SERVER=ftp.nl.debian.org
#! / bin / ทุบตี
# สคริปต์เพื่อดึงไฟล์ผ่าน 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 บาย
_อีโอเอฟ_
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 บาย
_อีโอเอฟ_
ls -l $REMOTE_FILE