มีความแตกต่างระหว่างคำสั่งที่คุณพิมพ์ลงในเทอร์มินัลและคำสั่งที่คุณรวมไว้ในสคริปต์หรือไม่?
มีความแตกต่างระหว่างคำสั่งที่คุณพิมพ์ลงในเทอร์มินัลและคำสั่งที่คุณรวมไว้ในสคริปต์หรือไม่?
คำตอบ:
เทอร์มินัลของคุณใช้งานเชลล์ (ส่วนใหญ่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 นามแฝงที่กำหนดฟังก์ชันและสิ่งต่าง ๆ เช่นนั้น พวกเขาสามารถเปลี่ยนแปลงได้เฉพาะการโต้ตอบหรือโดยการจัดหาไฟล์ แต่ใช่ว่าคงไม่มีอะไรที่คนจะสะดุดเมื่อวันแรก :)