ความหมายของผลตอบแทน 127 จาก $ คืออะไร? ใน UNIX
ความหมายของผลตอบแทน 127 จาก $ คืออะไร? ใน UNIX
คำตอบ:
ค่า 127 ถูกส่งคืนโดย/bin/sh
เมื่อไม่พบคำสั่งที่กำหนดภายในPATH
ตัวแปรระบบของคุณและไม่ใช่คำสั่งเชลล์ในตัว กล่าวอีกนัยหนึ่งระบบไม่เข้าใจคำสั่งของคุณเพราะไม่รู้ว่าจะหาไบนารีที่คุณพยายามโทรหาได้ที่ไหน
which [program]
ดูว่าระบบปฏิบัติการใดที่ใช้ไบนารี หากว่างเปล่าขั้นตอนต่อไปคือการตรวจสอบบิตการดำเนินการและ PATH
which
ไม่ถูกต้องโดยเฉพาะ - มันไม่รู้เกี่ยวกับนามแฝง, ฟังก์ชั่นของเชลล์, การบันทึกการค้นหา PATH หรือปัจจัยอื่น ๆ ที่อยู่ในสถานะเชลล์ ดีกว่าที่จะใช้type
เป็นตัวสร้างเชลล์ซึ่งรู้เกี่ยวกับทุกสิ่งเหล่านั้น
126
( Permission denied
) ไม่ใช่127
เมื่อฉันพยายามเรียกใช้ไฟล์ที่ไม่สามารถใช้งานได้ (โดยไม่คำนึงถึงเนื้อหา) ในทำนองเดียวกันความพยายามในการดำเนินการไดเรกทอรียังส่งผลให้126
( is a directory
)
โดยทั่วไปหมายถึง:
127 - ไม่พบคำสั่ง
แต่ก็ยังสามารถหมายความว่าคำสั่งจะพบ ,
แต่ห้องสมุดที่ถูกต้องตามคำสั่งไม่พบ
127 - command not found
ตัวอย่าง: $ caat ข้อความผิดพลาดจะ
ทุบตี:
caat: ไม่พบคำสั่ง
ตอนนี้คุณตรวจสอบการใช้ echo $?
ข้อตกลงเชลล์คือการที่โปรแกรมที่ประสบความสำเร็จควรออกด้วยค่า 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.
มันไม่มีความหมายพิเศษนอกจากกระบวนการสุดท้ายที่จะออกได้ด้วยสถานะการออกเป็น 127
อย่างไรก็ตามมันยังถูกใช้โดย bash (สมมติว่าคุณใช้ bash เป็นเชลล์) เพื่อบอกคุณว่าคำสั่งที่คุณพยายามเรียกใช้ไม่สามารถดำเนินการได้ (เช่นไม่พบ) น่าเสียดายที่ไม่สามารถหักล้างได้ทันทีหากกระบวนการออกจากสถานะ 127 หรือหากไม่พบ
แก้ไข:
ไม่หักล้างได้ทันทียกเว้นผลลัพธ์บนคอนโซล แต่นี่เป็นสแต็กล้นดังนั้นฉันจึงคิดว่าคุณกำลังทำสิ่งนี้อยู่ในสคริปต์
ข้อผิดพลาดนี้บางครั้งก็หลอกลวง มันบอกว่าไม่พบไฟล์แม้ว่าไฟล์นั้นจะมีอยู่จริง อาจเป็นเพราะอักขระพิเศษที่อ่านไม่ได้ที่ไม่ถูกต้องมีอยู่ในไฟล์ที่อาจเกิดจากโปรแกรมแก้ไขที่คุณใช้งานอยู่ ลิงค์นี้อาจช่วยคุณในกรณีเช่นนี้
-bash: ./my_script: / bin / bash ^ M: ล่ามไม่ดี: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
วิธีที่ดีที่สุดในการตรวจสอบว่าเป็นปัญหานี้หรือไม่ให้วางคำสั่ง echo อย่างง่ายในไฟล์ทั้งหมดและตรวจสอบว่ามีข้อผิดพลาดเดียวกันเกิดขึ้นหรือไม่
หากคุณพยายามเรียกใช้โปรแกรมโดยใช้ภาษาสคริปต์คุณอาจต้องรวมเส้นทางแบบเต็มของภาษาสคริปต์และไฟล์ที่จะเรียกใช้ ตัวอย่างเช่น:
exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
หากเมนเฟรมของ IBM JCL มีอักขระพิเศษหรือตัวเลขบางตัวที่ส่วนท้ายของชื่อสคริปต์ unix ที่ถูกเรียกใช้จากนั้นจะสามารถโยนข้อผิดพลาดดังกล่าวได้