คำถามติดแท็ก shebang

ใช้แท็ก / shebang หากคำถามของคุณเกี่ยวกับ `#! '-string ที่จุดเริ่มต้นของสคริปต์

3
ทำไมรูปแบบการทำงานของ `#!` ไม่ได้รับการระบุโดย POSIX
จากหน้าภาษาคำสั่งเชลล์ของข้อมูลจำเพาะ POSIX: หากบรรทัดแรกของไฟล์คำสั่งเชลล์เริ่มต้นด้วยอักขระ "#!" ผลลัพธ์จะไม่ถูกระบุ ทำไมพฤติกรรมของ#!ไม่ระบุโดย POSIX ฉันพบว่ามันทำให้งงงวยว่าบางสิ่งบางอย่างพกพาและใช้กันอย่างแพร่หลายจะมีพฤติกรรมที่ไม่ระบุ
17 shell  posix  shebang 

2
อาร์กิวเมนต์ '-v' และ '-x' หมายถึงการทุบตีอย่างไร
ฉันได้เห็นเชลล์สคริปต์สองสามตัวด้วย shebang ต่อไปนี้ #!/bin/bash -x -v แต่man bashไม่ได้อธิบายสิ่งที่ขัดแย้งเหล่านี้-xและ-vยืนถ้าพวกเขาจะเป็นของbashที่ทุกคน ดังนั้นสิ่งเหล่านั้น-xและ-v(และข้อโต้แย้งที่เป็นไปได้อื่น ๆ ) หมายความว่าอย่างไร
17 bash  shebang 

3
เชลล์ล่ามคนใดเรียกใช้สคริปต์โดยไม่มี shebang?
สมมติว่าเชลล์เริ่มต้นสำหรับบัญชีของฉันคือ zsh แต่ฉันเปิดเทอร์มินัลและยิงทุบตีและเรียกใช้สคริปต์ชื่อprac002.shซึ่งล่ามเชลล์ใดที่จะใช้ในการรันสคริปต์ zsh หรือ bash? ลองพิจารณาตัวอย่างต่อไปนี้: papagolf@Sierra ~/My Files/My Programs/Learning/Shell % sudo cat /etc/passwd | grep papagolf [sudo] password for papagolf: papagolf:x:1000:1001:Rex,,,:/home/papagolf:/usr/bin/zsh # papagolf's default shell is zsh papagolf@Sierra ~/My Files/My Programs/Learning/Shell % bash # I fired up bash. (See that '%' prompt in zsh changes to '$' prompt, …


6
เลือกล่ามหลังจากเริ่มต้นสคริปต์เช่นถ้า / else อยู่ใน hashbang
มีวิธีใดบ้างในการเลือกล่ามที่กำลังเรียกใช้สคริปต์แบบไดนามิก ฉันมีสคริปต์ที่ฉันใช้ในระบบที่แตกต่างกันสองระบบและล่ามที่ฉันต้องการใช้นั้นจะอยู่ในตำแหน่งที่ตั้งที่ต่างกันในทั้งสองระบบ สิ่งที่ฉันต้องทำคือเปลี่ยนสาย hashbang ทุกครั้งที่เปลี่ยนไป ฉันต้องการทำบางสิ่งที่เทียบเท่ากับตรรกะของสิ่งนี้ (ฉันรู้ว่าการสร้างที่แน่นอนนี้เป็นไปไม่ได้): if running on system A: #!/path/to/python/on/systemA elif running on system B: #!/path/on/systemB #Rest of script goes here หรือจะดีกว่านี้ก็เพื่อให้พยายามใช้ล่ามตัวแรกและหากไม่พบมันจะใช้ตัวที่สอง: try: #!/path/to/python/on/systemA except: #!path/on/systemB #Rest of script goes here เห็นได้ชัดว่าผมแทนสามารถดำเนินการได้เป็น /path/to/python/on/systemA myscript.py หรือ /path/on/systemB myscript.py ขึ้นอยู่กับที่ผม แต่ที่จริงผมมีสคริปต์เสื้อคลุมที่เปิดตัวmyscript.pyดังนั้นผมอยากจะระบุเส้นทางไปล่ามหลามทางโปรแกรมมากกว่าด้วยมือ

6
การใช้ / bin / sh ใน hashbang นั้นถูกต้องหรือไม่หากเชลล์เป้าหมายไม่สามารถใช้งานได้
#!/bin/shโดยทั่วไปเชลล์สคริปต์มีความคิดเห็นต่อไปนี้ที่บรรทัดแรกของไฟล์สคริปต์: จากการวิจัยที่ฉันทำมันเรียกว่า "hash bang" และมันเป็นความเห็นทั่วไป /binความคิดเห็นนี้แจ้งยูนิกซ์ว่าไฟล์นี้จะถูกดำเนินการโดยบอร์นเชลล์ภายใต้ไดเรกทอรี คำถามของฉันเริ่มต้นในจุดนั้น #!/bin/bashถึงตอนนี้ฉันไม่ได้เห็นความคิดเห็นนี้เช่น #!/bin/shมันก็มักจะ อย่างไรก็ตามการแจกแจง Ubuntu ไม่มีโปรแกรม Bourne Shell พวกเขามี Bourne Again Shell (ทุบตี) ในจุดนั้นถูกต้องหรือไม่ที่จะแสดงความคิดเห็น#!/bin/shในเชลล์สคริปต์ที่เขียนในการแจกแจงของ Ubuntu?

2
Shebang นี้เริ่มต้นด้วยเครื่องหมายขีดคั่นคู่ (-) อย่างไร
ฉันได้พบ shebang ประเภทต่อไปนี้ในหน้า RosettaCode: --() { :; }; exec db2 -txf "$0" มันใช้งานได้สำหรับ Db2 และสิ่งที่คล้ายกันสำหรับ Postgres อย่างไรก็ตามฉันไม่เข้าใจทั้งบรรทัด ฉันรู้ว่าเส้นประสองครั้งเป็นความคิดเห็นใน SQL และหลังจากนั้นมันเรียกการปฏิบัติการ Db2 ด้วยพารามิเตอร์บางตัวที่ส่งไฟล์ตัวเองเป็นไฟล์ แต่สิ่งที่เกี่ยวกับวงเล็บวงเล็บปีกกาลำไส้ใหญ่และเซมิโคลอนและวิธีสามารถแทนที่ shebang # จริง! ? https://rosettacode.org/wiki/Multiline_shebang#PostgreSQL

3
ทำไม "ps axe" ไม่พบสคริปต์ทุบตีที่รันอยู่โดยไม่มี“ #!” หัวข้อ?
เมื่อฉันเรียกใช้สคริปต์นี้ตั้งใจให้ทำงานจนกว่าจะฆ่า ... # foo.sh while true; do sleep 1; done ... ฉันไม่สามารถหาได้โดยใช้ps ax: >./foo.sh // In a separate shell: >ps ax | grep foo.sh 21110 pts/3 S+ 0:00 grep --color=auto foo.sh ... แต่ถ้าฉันเพิ่งเพิ่ม#!ส่วนหัว " " ทั่วไปลงในสคริปต์ ... #! /usr/bin/bash # foo.sh while true; do sleep 1; done ... จากนั้นสคริปต์จะสามารถค้นหาได้โดยpsคำสั่งเดียวกัน... >./foo.sh …

6
มีแนว shebang (การประกาศสคริปต์) มากเกินไป - วิธีใดที่จะลดจำนวนลงบ้าง
ฉันมีโครงการประกอบด้วย.shไฟล์ขนาดเล็กประมาณ 20 ไฟล์ ฉันตั้งชื่อ "เล็ก" เหล่านี้เพราะโดยทั่วไปไม่มีไฟล์ใดที่มีโค้ดเกิน 20 บรรทัด ฉันใช้แนวทางแบบแยกส่วนเพราะฉันภักดีต่อปรัชญา Unixและง่ายต่อการดูแลรักษาโครงการ ในการเริ่มต้นของแต่ละไฟล์ผมใส่.sh#!/bin/bash ฉันเข้าใจว่าการประกาศสคริปต์มีจุดประสงค์สองประการ: พวกเขาช่วยให้ผู้ใช้เรียกคืนสิ่งที่เชลล์ต้องการเพื่อเรียกใช้ไฟล์ (พูดหลังจากผ่านไปหลายปีโดยไม่ต้องใช้ไฟล์) พวกเขาให้แน่ใจว่าสคริปต์ทำงานเฉพาะกับเปลือกบางอย่าง (ทุบตีในกรณีนั้น) เพื่อป้องกันพฤติกรรมที่ไม่คาดคิดในกรณีที่ใช้เปลือกอื่น เมื่อโครงการเริ่มเติบโตจากไฟล์ 5 ไฟล์เป็น 20 ไฟล์หรือจาก 20 ไฟล์เป็น 50 ไฟล์ (ไม่ใช่กรณีนี้ แต่เพื่อสาธิต) เรามีการประกาศสคริปต์20 บรรทัดหรือ 50 บรรทัด ฉันยอมรับแม้ว่ามันอาจจะตลกสำหรับบางคน แต่ก็รู้สึกซ้ำซ้อนสำหรับฉันที่จะใช้ 20 หรือ 50 แทนที่จะพูดเพียง1 ต่อโครงการ (อาจเป็นไฟล์หลักของโครงการ) มีวิธีที่จะหลีกเลี่ยงความซ้ำซ้อนที่ถูกกล่าวหานี้ 20 หรือ 50 หรือจำนวนบรรทัดของการประกาศสคริปต์มากขึ้นโดยใช้การประกาศสคริปต์ "ทั่วโลก" ในไฟล์หลักบางไฟล์?

3
การกระจายสคริปต์: ฉันควรใช้ / bin / gawk หรือ / usr / bin / gawk สำหรับ shebang หรือไม่
เหยี่ยวใน / bin หรือ / usr / bin เป็นปกติหรือไม่? ฉันจะไปด้วย#!/usr/bin/env gawkแต่แล้วฉันก็ไม่สามารถใช้การโต้แย้ง #!/bin/gawk -fตอนนี้ผมใช้ สคริปต์ยาวมากและมีคำพูดเดียวจำนวนมากและใช้งานได้กับ stdin คู่มือ GNU Awk มีส่วน 1.1.4 โปรแกรมปฏิบัติการ awkที่ใช้ #! / bin / awk ในตัวอย่าง แต่จะพูดต่อไปว่า: โปรดทราบว่าในระบบจำนวนมากawkอาจพบได้ในแทนใน/usr/bin /binCaveat Emptor คนส่วนใหญ่ทำอะไร ฉันได้อ่านsed แล้วจะถือว่าเป็นมาตรฐานใน / binในขณะที่ perl นั้นควรจะเป็นมาตรฐานใน / usr / bin (หน้าเดียวกับ sed link แต่พวกเขาจะไม่ให้ฉันสร้างลิงค์ที่สามสำหรับโพสต์นี้) แล้ว awk / …
12 awk  shebang  env 

1
ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว แต่ฉันเห็นได้!
ฉันพยายามเรียกใช้สคริปต์ python บน Raspberry PI ที่ไม่มีส่วนหัวโดยใช้ winSCP และได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: Command '"./areadetect_movie_21.py"' failed with return code 127 and error message /usr/bin/env: python : No such file or directory. เมื่อฉันลองและเรียกใช้จาก terminal ฉันได้รับ: : No such file or directory. ฉันลองสคริปต์ python ที่คล้ายกันในไดเรกทอรีเดียวกันกับ python shebang ที่เหมือนกันการอนุญาตแบบเดียวกันและการใช้ pi ผู้ใช้เดียวกันและใช้งานได้ ฉันยังทำlsและฉันสามารถดูไฟล์ได้ดังนั้นฉันจึงไม่รู้ว่าทำไมมันไม่ทำงาน

2
ทำไม #! / usr / bin / env ทุบตีไม่ทำงานในระบบของฉัน
bad interpreterฉันวิ่งเข้าไปในบางประเด็นที่เมื่อทำงานสคริปต์การติดตั้งบางอย่างที่พวกเขาบ่น ดังนั้นฉันจึงทำตัวอย่างเล็กน้อย แต่ไม่สามารถเข้าใจได้ว่าปัญหาคืออะไรดูด้านล่าง #!/usr/bin/env bash echo "hello" การเรียกใช้สคริปต์ข้างต้นส่งผลให้เกิดข้อผิดพลาดดังต่อไปนี้ [root@ech-10-24-130-154 dc-user]# ./junk.sh bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory /usr/bin/envไฟล์ที่มีอยู่ดูด้านล่าง: [root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env [root@ech-10-24-130-154 dc-user]# ls -l /bin/env -rwxr-xr-x 1 root root 23832 Jul …

3
ทำไม“ she-bang” เริ่มต้นด้วย“ #!”
ทำไม "เธอปัง" เริ่มต้นด้วย#!เช่น#!/bin/bash? ฉันยอมรับเสมอว่านี่เป็นวิธีที่ทำได้ แต่มีเหตุผลอยู่เบื้องหลังหรือไม่ ทำไมเริ่มต้นด้วย#; นั่นไม่ใช่ความคิดเห็นใช่ไหม หรือเป็นประเด็นที่ควรแสดงความคิดเห็น?
10 shell  history  shebang 

1
shebang line ไม่ทำงานกับ cr-lf
ทำไมส่วนของ shebang ของสคริปต์พื้นฐานต่อไปนี้จึงไม่ทำงาน: $ cat hello.sh #! /bin/sh echo Hello $ ./hello.sh bash: ./hello.sh: /bin/sh^M: bad interpreter: No such file or directory $ cat hello.py #! /usr/bin/env python3 print("Hello") $ ./hello.py : No such file or directory ในขณะที่การเรียกล่ามด้วยตนเองทำงาน: $ sh hello.sh Hello $ python3 hello.py Hello

4
การเรียกใช้สคริปต์หลามจาก Linux Terminal
ฉันได้ดาวน์โหลดสคริปต์นี้ชื่อว่า pyAES.py และใส่ไว้ในรหัสชื่อโฟลเดอร์ในไดเรกทอรี Desktop ของ Linux ของฉัน ตามตัวอย่างนี้ http://brandon.sternefamily.net/2007/06/aes-tutorial-python-implementation/ เมื่อฉันพิมพ์ ./pyAES.py -e testfile.txt -o testfile_encrypted.txt ควรดำเนินการไฟล์ pyAES.py แต่ฉันได้รับข้อผิดพลาดนี้ pi@raspberrypi ~/Desktop/Codes $ pyAES.py -bash: pyAES.py: command not found ผลลัพธ์ของls -lคำสั่งคือ pi@raspberrypi ~/Desktop/Codes $ ls -l total 16 -rw-r--r-- 1 pi pi 14536 Oct 8 10:44 pyAES.py นี่คือผลลัพธ์หลังจาก chmod +x pi@raspberrypi ~/Desktop/Codes …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.