มีความแตกต่างระหว่างคำสั่งที่คุณพิมพ์ลงในเทอร์มินัลและคำสั่งที่คุณรวมไว้ในสคริปต์หรือไม่?
มีความแตกต่างระหว่างคำสั่งที่คุณพิมพ์ลงในเทอร์มินัลและคำสั่งที่คุณรวมไว้ในสคริปต์หรือไม่?
คำตอบ:
เทอร์มินัลของคุณใช้งานเชลล์ (ส่วนใหญ่bash
) ซึ่งเป็นสิ่งที่ขอคำสั่งของคุณและรันมัน
นอกจากโหมดการโต้ตอบนี้คุณยังสามารถใช้เชลล์เพื่อเรียกใช้คำสั่งจากไฟล์ เพื่อรันคำสั่งในไฟล์ของคุณคุณสามารถเรียกเชลล์โดยตรงเช่นbash script
หรือคุณสามารถเริ่มต้นไฟล์ของคุณด้วย "shebang" #!/bin/bash
และทำให้มันปฏิบัติการ ( chmod +x script
) จากนั้นคุณสามารถปฏิบัติต่อสคริปต์เช่นไบนารีและดำเนินการเช่น./script
หรือวางไว้ในสถานที่ที่คุณเปลือกจะมองหามัน ( echo $PATH
)
bash
ส่วนใหญ่อาจทั้งเปลือกโต้ตอบของคุณและเปลือกใช้ในการทำงานคือ จากมุมมองของ "การเรียนรู้วันแรกลินุกซ์" ทุบตีทำงานเหมือนกันในทั้งสองโหมด - ในภายหลังคุณอาจพบความแตกต่างเล็กน้อย หากคุณต้องการทราบรายละเอียดอย่างแท้จริงฉันขอแนะนำให้อ่านman bash
และค้นหาสถานที่ที่กล่าวถึง "แบบโต้ตอบ" (คุณสามารถค้นหาหน้าคนได้โดยกด/
)
สิ่งสำคัญที่ควรทราบคือสคริปต์ถูกเรียกใช้เป็นกระบวนการใหม่ โดยเฉพาะอย่างยิ่งหมายความว่าตัวแปรที่ตั้งค่าในสคริปต์ไม่สามารถมองเห็นได้ในการเรียกเชลล์
$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$
หากไม่มีการส่งออกa
จะไม่สามารถมองเห็นสคริปต์ภายในได้
โดยทั่วไปคำตอบคือ "ไม่" คำสั่งในเชลล์เหมือนกันในสคริปต์ในไวยากรณ์และความหมาย
แต่มีความแตกต่างเล็ก ๆ น้อย ๆ ที่เกี่ยวข้องกับการกำหนดค่าของสภาพแวดล้อม (ตัวแปรใดบ้างที่ใช้และสิ่งที่พวกเขาตั้งไว้)
เปลือกโต้ตอบของทางเลือกสำหรับลินุกซ์ทุบตี แต่สคริปต์มักจะใช้ล่ามอื่น ๆ ( sh
ซึ่งเป็นบรรพบุรุษของbash
, ksh
ซึ่งเป็นที่ตราไว้กับทุบตี) ดังนั้นคุณจะต้องคำนึงถึงสิ่งที่เปลือกจะใช้ (ชื่อเปลือกปัจจุบัน s ถูกเก็บไว้ในตัวแปรแบบดั้งเดิมSHELL
ลองพิมพ์echo $SHELL
)
อาจมีความแตกต่างในการกำหนดค่าของล่ามเดียวกันสำหรับเซสชั่นแบบโต้ตอบและการดำเนินการสคริปต์
ไม่สคริปต์คือรายการคำสั่งที่คุณสามารถพิมพ์ในเทอร์มินัล
คุณสามารถวางผลรวมของสคริปต์ในเทอร์มินัลและผลลัพธ์จะเหมือนกับการรันสคริปต์
ในทางกลับกันคุณสามารถ "บันทึก" คำสั่งเทอร์มินัลภายในไฟล์และแปลงให้เป็นสคริปต์ที่ใช้ซ้ำได้และแบ่งปันกับครอบครัวและเพื่อนของคุณ
source script_file
วางเนื้อหาของสคริปต์จะเทียบเท่ากับการทำ ซึ่งจะแก้ไข ENV vars ในบริบทปัจจุบัน ในขณะที่เรียกใช้สคริปต์./script_file
จะไม่แก้ไข ENV ยกเว้นว่าexport
มีการใช้อย่างชัดเจน
export
จะเป็นไปไม่ได้ที่สคริปต์จะแก้ไขตัวแปรใด ๆ ของการเรียกเชลล์ สิ่งเดียวกันเช่น PWD นามแฝงที่กำหนดฟังก์ชันและสิ่งต่าง ๆ เช่นนั้น พวกเขาสามารถเปลี่ยนแปลงได้เฉพาะการโต้ตอบหรือโดยการจัดหาไฟล์ แต่ใช่ว่าคงไม่มีอะไรที่คนจะสะดุดเมื่อวันแรก :)