127 โค้ดส่งคืนจาก $?


คำตอบ:


428

ค่า 127 ถูกส่งคืนโดย/bin/shเมื่อไม่พบคำสั่งที่กำหนดภายในPATHตัวแปรระบบของคุณและไม่ใช่คำสั่งเชลล์ในตัว กล่าวอีกนัยหนึ่งระบบไม่เข้าใจคำสั่งของคุณเพราะไม่รู้ว่าจะหาไบนารีที่คุณพยายามโทรหาได้ที่ไหน


55
สิ่งนี้จะเกิดขึ้นหากสคริปต์ทุบตีไม่มีโหมด "+ x" แต่มีอยู่จริง
MatthewKremer

3
คุณสามารถลองใช้which [program]ดูว่าระบบปฏิบัติการใดที่ใช้ไบนารี หากว่างเปล่าขั้นตอนต่อไปคือการตรวจสอบบิตการดำเนินการและ PATH
four43

10
@ cr125rider whichไม่ถูกต้องโดยเฉพาะ - มันไม่รู้เกี่ยวกับนามแฝง, ฟังก์ชั่นของเชลล์, การบันทึกการค้นหา PATH หรือปัจจัยอื่น ๆ ที่อยู่ในสถานะเชลล์ ดีกว่าที่จะใช้typeเป็นตัวสร้างเชลล์ซึ่งรู้เกี่ยวกับทุกสิ่งเหล่านั้น
Charles Duffy

5
สิ่งนี้เกิดขึ้นกับฉันด้วยไฟล์ที่มีฟีดบรรทัด Windows การแก้ไขการสิ้นสุดบรรทัดเป็นรูปแบบ unix แก้ปัญหาได้
Mitkins

4
@ MatthewKremer: ที่จริงแล้วฉันได้รับ126( Permission denied) ไม่ใช่127เมื่อฉันพยายามเรียกใช้ไฟล์ที่ไม่สามารถใช้งานได้ (โดยไม่คำนึงถึงเนื้อหา) ในทำนองเดียวกันความพยายามในการดำเนินการไดเรกทอรียังส่งผลให้126( is a directory)
mklement0

58

โดยทั่วไปหมายถึง:

127 - ไม่พบคำสั่ง

แต่ก็ยังสามารถหมายความว่าคำสั่งจะพบ ,
แต่ห้องสมุดที่ถูกต้องตามคำสั่งไม่พบ


14

127 - command not found

ตัวอย่าง: $ caat ข้อความผิดพลาดจะ

ทุบตี:

caat: ไม่พบคำสั่ง

ตอนนี้คุณตรวจสอบการใช้ echo $?


10

ข้อตกลงเชลล์คือการที่โปรแกรมที่ประสบความสำเร็จควรออกด้วยค่า 0 สิ่งอื่น ๆ สามารถตีความได้ว่าเป็นความล้มเหลวของการจัดเรียงบางส่วนในส่วนของทุบตีหรือปฏิบัติการที่คุณเพิ่งวิ่ง ดูเพิ่มเติม$ PIPESTATUSและส่วนEXIT สถานะของหน้าคนทุบตี:

   For  the shell’s purposes, a command which exits with a zero exit status has succeeded.  An exit status
   of zero indicates success.  A non-zero exit status indicates failure.  When a command terminates  on  a
   fatal signal N, bash uses the value of 128+N as the exit status.
   If  a command is not found, the child process created to execute it returns a status of 127.  If a com-
   mand is found but is not executable, the return status is 126.

   If a command fails because of an error during expansion or redirection, the exit status is greater than
   zero.

   Shell  builtin  commands  return  a  status of 0 (true) if successful, and non-zero (false) if an error
   occurs while they execute.  All builtins return an exit status of 2 to indicate incorrect usage.

   Bash itself returns the exit status of the last command executed, unless  a  syntax  error  occurs,  in
   which case it exits with a non-zero value.  See also the exit builtin command below.

8

มันไม่มีความหมายพิเศษนอกจากกระบวนการสุดท้ายที่จะออกได้ด้วยสถานะการออกเป็น 127

อย่างไรก็ตามมันยังถูกใช้โดย bash (สมมติว่าคุณใช้ bash เป็นเชลล์) เพื่อบอกคุณว่าคำสั่งที่คุณพยายามเรียกใช้ไม่สามารถดำเนินการได้ (เช่นไม่พบ) น่าเสียดายที่ไม่สามารถหักล้างได้ทันทีหากกระบวนการออกจากสถานะ 127 หรือหากไม่พบ

แก้ไข:
ไม่หักล้างได้ทันทียกเว้นผลลัพธ์บนคอนโซล แต่นี่เป็นสแต็กล้นดังนั้นฉันจึงคิดว่าคุณกำลังทำสิ่งนี้อยู่ในสคริปต์


2

ข้อผิดพลาดนี้บางครั้งก็หลอกลวง มันบอกว่าไม่พบไฟล์แม้ว่าไฟล์นั้นจะมีอยู่จริง อาจเป็นเพราะอักขระพิเศษที่อ่านไม่ได้ที่ไม่ถูกต้องมีอยู่ในไฟล์ที่อาจเกิดจากโปรแกรมแก้ไขที่คุณใช้งานอยู่ ลิงค์นี้อาจช่วยคุณในกรณีเช่นนี้

-bash: ./my_script: / bin / bash ^ M: ล่ามไม่ดี: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

วิธีที่ดีที่สุดในการตรวจสอบว่าเป็นปัญหานี้หรือไม่ให้วางคำสั่ง echo อย่างง่ายในไฟล์ทั้งหมดและตรวจสอบว่ามีข้อผิดพลาดเดียวกันเกิดขึ้นหรือไม่


1

หากคุณพยายามเรียกใช้โปรแกรมโดยใช้ภาษาสคริปต์คุณอาจต้องรวมเส้นทางแบบเต็มของภาษาสคริปต์และไฟล์ที่จะเรียกใช้ ตัวอย่างเช่น:

exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');

ขอบคุณสิ่งนี้ใช้ได้สำหรับฉัน ดังนั้นฉันจึงทำ gs ใดแล้วใช้เส้นทางผลลัพธ์ในสคริปต์ของฉัน ทำงาน ..
Juan

0

หากเมนเฟรมของ IBM JCL มีอักขระพิเศษหรือตัวเลขบางตัวที่ส่วนท้ายของชื่อสคริปต์ unix ที่ถูกเรียกใช้จากนั้นจะสามารถโยนข้อผิดพลาดดังกล่าวได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.