ฉันเจอตัวอย่างนี้เมื่อพยายามติดตั้งอุปกรณ์ usb ภายในคอนเทนเนอร์ openvz และฉันไม่เคยเห็นโครงสร้างในบรรทัดที่สองมาก่อน คุณช่วยอธิบายสิ่งที่มันสื่อความหมายได้หรือไม่
#!/bin/bash
. /etc/vz/vz.conf
ฉันเจอตัวอย่างนี้เมื่อพยายามติดตั้งอุปกรณ์ usb ภายในคอนเทนเนอร์ openvz และฉันไม่เคยเห็นโครงสร้างในบรรทัดที่สองมาก่อน คุณช่วยอธิบายสิ่งที่มันสื่อความหมายได้หรือไม่
#!/bin/bash
. /etc/vz/vz.conf
คำตอบ:
มันเป็นไวพจน์ของ source
builtin มันจะรันคำสั่งจากไฟล์ในเปลือกปัจจุบันเช่นอ่านจากหรือhelp source
help .
ในกรณีของคุณไฟล์/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
$
หวังว่านี่จะช่วยได้
source
ไม่เพียงแค่ทุบตี - มันอยู่ใน C-style shells ( csh
, tcsh
) - และ zsh ด้วย .
ทำงานอยู่ในเปลือกหอยบอร์นสไตล์รวมทั้งที่ระบุไว้ เมื่อพิจารณาว่า bash เป็นเชลล์สไตล์ Bourne และแทบจะไม่สคริปต์ bash ใด ๆ ของความซับซ้อนที่ไม่สำคัญมีแนวโน้มที่จะทำงานในเชลล์ C สไตล์มันเป็นความจริงที่.
ควรพิจารณาพกพามากขึ้น แต่source
คำพ้องความหมายของ bash นั้น.
มีอยู่บางส่วนเพื่อการพกพา
.
พกพาได้ทั่วโลกและsource
แพร่หลาย แต่ไม่สามารถใช้งานsh
ได้
เมื่อสคริปต์รันโดยใช้ `ซอร์ส 'สคริปต์จะรันภายในเชลล์ที่มีอยู่ตัวแปรใด ๆ ที่สร้างหรือแก้ไขโดยสคริปต์จะยังคงใช้งานได้หลังจากสคริปต์เสร็จสิ้น
วากยสัมพันธ์ ชื่อไฟล์ [อาร์กิวเมนต์]
source filename [arguments]
.
จะทำงานในหอยส่วนใหญ่ (sh, ash, ksh, ฯลฯ )source
เป็นเฉพาะสำหรับทุบตี