ในสคริปต์ทุบตีจุดตามด้วยช่องว่างแล้วเส้นทางหมายถึงอะไร


83

ฉันเจอตัวอย่างนี้เมื่อพยายามติดตั้งอุปกรณ์ usb ภายในคอนเทนเนอร์ openvz และฉันไม่เคยเห็นโครงสร้างในบรรทัดที่สองมาก่อน คุณช่วยอธิบายสิ่งที่มันสื่อความหมายได้หรือไม่

#!/bin/bash
. /etc/vz/vz.conf

คำตอบ:


98

มันเป็นไวพจน์ของ sourcebuiltin มันจะรันคำสั่งจากไฟล์ในเปลือกปัจจุบันเช่นอ่านจากหรือhelp sourcehelp .

ในกรณีของคุณไฟล์/etc/vz/vz.confจะถูกดำเนินการ (น่าจะเป็นเพียงไฟล์นั้นมีการกำหนดตัวแปรที่จะใช้ในสคริปต์ในภายหลัง) มันแตกต่างจากเพียงแค่การเรียกใช้ไฟล์ด้วยเช่น/etc/vz/vz.confในหลาย ๆ ทาง: สิ่งที่ชัดเจนที่สุดคือไฟล์นั้นไม่จำเป็นต้องถูกเรียกใช้งาน จากนั้นคุณจะคิดว่าจะรันด้วยbash /etc/vz/vz.confแต่จะดำเนินการในกระบวนการลูกเท่านั้นและสคริปต์ผู้ปกครองจะไม่เห็นการแก้ไขใด ๆ (เช่นของตัวแปร) ที่เด็กทำ

ตัวอย่าง:

$ # Create a file testfile that contains a variable assignment:
$ echo "a=hello" > testfile
$ # Check that the variable expands to nothing:
$ echo "$a"

$ # Good. Now execute the file testfile with bash
$ bash testfile
$ # Check that the variable a still expands to nothing:
$ echo "$a"

$ # Now _source_ the file testfile:
$ . testfile
$ # Now check the value of the variable a:
$ echo "$a"
hello
$

หวังว่านี่จะช่วยได้


14
เพียงแค่ทราบ: .จะทำงานในหอยส่วนใหญ่ (sh, ash, ksh, ฯลฯ ) sourceเป็นเฉพาะสำหรับทุบตี
Dmytro Sirenko

3
@EarlGray sourceไม่เพียงแค่ทุบตี - มันอยู่ใน C-style shells ( csh, tcsh) - และ zsh ด้วย .ทำงานอยู่ในเปลือกหอยบอร์นสไตล์รวมทั้งที่ระบุไว้ เมื่อพิจารณาว่า bash เป็นเชลล์สไตล์ Bourne และแทบจะไม่สคริปต์ bash ใด ๆ ของความซับซ้อนที่ไม่สำคัญมีแนวโน้มที่จะทำงานในเชลล์ C สไตล์มันเป็นความจริงที่.ควรพิจารณาพกพามากขึ้น แต่sourceคำพ้องความหมายของ bash นั้น.มีอยู่บางส่วนเพื่อการพกพา
Eliah Kagan

1
@EliahKagan ใช่คุณพูดถูก; ดีกว่าที่จะพูดว่า.พกพาได้ทั่วโลกและsourceแพร่หลาย แต่ไม่สามารถใช้งานshได้
Dmytro Sirenko

5

เมื่อสคริปต์รันโดยใช้ `ซอร์ส 'สคริปต์จะรันภายในเชลล์ที่มีอยู่ตัวแปรใด ๆ ที่สร้างหรือแก้ไขโดยสคริปต์จะยังคงใช้งานได้หลังจากสคริปต์เสร็จสิ้น

วากยสัมพันธ์ ชื่อไฟล์ [อาร์กิวเมนต์]

  source filename [arguments]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.