ความแตกต่างระหว่างคำสั่งใน bash script และคำสั่งใน terminal


13

มีความแตกต่างระหว่างคำสั่งที่คุณพิมพ์ลงในเทอร์มินัลและคำสั่งที่คุณรวมไว้ในสคริปต์หรือไม่?


ไม่ใช่คำถามที่โง่อย่างแน่นอน! ตรวจสอบนี้ (ตอนแรก) แล้วนี้และนี้
Emanuel Berg

คำตอบ:


7

เทอร์มินัลของคุณใช้งานเชลล์ (ส่วนใหญ่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จะไม่สามารถมองเห็นสคริปต์ภายในได้


1

โดยทั่วไปคำตอบคือ "ไม่" คำสั่งในเชลล์เหมือนกันในสคริปต์ในไวยากรณ์และความหมาย

แต่มีความแตกต่างเล็ก ๆ น้อย ๆ ที่เกี่ยวข้องกับการกำหนดค่าของสภาพแวดล้อม (ตัวแปรใดบ้างที่ใช้และสิ่งที่พวกเขาตั้งไว้)

  • เปลือกโต้ตอบของทางเลือกสำหรับลินุกซ์ทุบตี แต่สคริปต์มักจะใช้ล่ามอื่น ๆ ( shซึ่งเป็นบรรพบุรุษของbash, kshซึ่งเป็นที่ตราไว้กับทุบตี) ดังนั้นคุณจะต้องคำนึงถึงสิ่งที่เปลือกจะใช้ (ชื่อเปลือกปัจจุบัน s ถูกเก็บไว้ในตัวแปรแบบดั้งเดิมSHELLลองพิมพ์echo $SHELL)

  • อาจมีความแตกต่างในการกำหนดค่าของล่ามเดียวกันสำหรับเซสชั่นแบบโต้ตอบและการดำเนินการสคริปต์


-1

ไม่สคริปต์คือรายการคำสั่งที่คุณสามารถพิมพ์ในเทอร์มินัล

คุณสามารถวางผลรวมของสคริปต์ในเทอร์มินัลและผลลัพธ์จะเหมือนกับการรันสคริปต์

ในทางกลับกันคุณสามารถ "บันทึก" คำสั่งเทอร์มินัลภายในไฟล์และแปลงให้เป็นสคริปต์ที่ใช้ซ้ำได้และแบ่งปันกับครอบครัวและเพื่อนของคุณ


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

คุณถูก. แต่เท่าที่คำถามของเขาไป ฉันคิดว่าเราพูดได้เหมือนกัน แต่ใช่เพื่อแปลสิ่งที่กล่าวว่า michas ในแง่ noob'er source script_fileวางเนื้อหาของสคริปต์จะเทียบเท่ากับการทำ ซึ่งจะแก้ไข ENV vars ในบริบทปัจจุบัน ในขณะที่เรียกใช้สคริปต์./script_fileจะไม่แก้ไข ENV ยกเว้นว่าexportมีการใช้อย่างชัดเจน
Mathieu J.

1
ไม่ได้แม้ว่าexportจะเป็นไปไม่ได้ที่สคริปต์จะแก้ไขตัวแปรใด ๆ ของการเรียกเชลล์ สิ่งเดียวกันเช่น PWD นามแฝงที่กำหนดฟังก์ชันและสิ่งต่าง ๆ เช่นนั้น พวกเขาสามารถเปลี่ยนแปลงได้เฉพาะการโต้ตอบหรือโดยการจัดหาไฟล์ แต่ใช่ว่าคงไม่มีอะไรที่คนจะสะดุดเมื่อวันแรก :)
michas

1
@ ไมเคิล: ก็ยังดีกว่าที่จะให้คำอธิบายที่ถูกต้อง หากผู้เริ่มต้นมีความทะเยอทะยานและมีนิสัยในการทำงานเขาหรือเธอจะรับอย่างรวดเร็ว หากเราพยายามเล่าเรื่องของเด็ก ๆ เราจะสะดุดเท้าของเราและสร้างความประทับใจที่เข้าใจยาก - นอกจากนั้นผู้เริ่มต้นอาจกลับมาอีกครั้งในภายหลัง ในขณะที่ฉันไม่คิดว่าตัวเองเป็นมือใหม่มีหลายสิ่งหลายอย่างที่ฉันไม่รู้และฉันก็จะถูกดูถูกหากใครที่ไม่ยอมตอบคำถามของฉันเพราะ "คุณยังไม่อยู่จูเนียร์"
Emanuel Berg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.