คำถามติดแท็ก exit-status

ใช้แท็กนี้หากคำถามของคุณวนเวียนอยู่กับการกำหนดหรือใช้สถานะการออก (โค้ดส่งคืน) ของคำสั่ง ไวยากรณ์ทั่วไปเกี่ยวข้องกับ $? ตัวแปรและ && และ || สัญลักษณ์

4
รหัสการออกเริ่มต้นเมื่อกระบวนการยุติลง?
เมื่อกระบวนการถูกฆ่าด้วยสัญญาณที่จับได้เช่นSIGINTหรือSIGTERMแต่ไม่จัดการสัญญาณสิ่งที่จะเป็นรหัสทางออกของกระบวนการ? สิ่งที่เกี่ยวกับสัญญาณที่SIGKILLไม่สามารถจัดการได้เป็นอย่างไร จากสิ่งที่ผมสามารถบอกได้ฆ่ากระบวนการที่มีSIGINTผลแนวโน้มในรหัสทางออก130แต่ที่แตกต่างกันโดย kernel หรือการดำเนินเปลือก? $ cat myScript #!/bin/bash sleep 5 $ ./myScript <ctrl-c here> $ echo $? 130 ฉันไม่แน่ใจว่าฉันจะทดสอบสัญญาณอื่น ๆ ได้อย่างไร ... $ ./myScript & $ killall myScript $ echo $? 0 # duh, that's the exit code of killall $ killall -9 myScript $ echo $? 0 # …


1
มีคำสั่งมาตรฐานที่มักจะออกมาพร้อมกับความล้มเหลวหรือไม่?
ฉันต้องการทดสอบสคริปต์ด้วยคำสั่งที่ล้มเหลว ฉันสามารถใช้คำสั่งที่มีอยู่ด้วยข้อโต้แย้งที่ไม่ดี ฉันยังสามารถเขียนสคริปต์ง่าย ๆ ที่ออกโดยทันทีด้วยความล้มเหลว ทั้งสองอย่างนี้ทำได้ง่ายและทำงานให้ฉัน แต่ถ้ามีคำสั่งมาตรฐานสำหรับวัตถุประสงค์นี้ฉันต้องการใช้สิ่งนั้นแทน

4
ค่า min และ max ของรหัสการออกใน Linux คืออะไร?
ค่า min และ max ของรหัสทางออกต่อไปนี้ใน Linux คืออะไร: โค้ดทางออกที่ส่งคืนจากไบนารีที่เรียกใช้งานได้ (ตัวอย่างเช่น: โปรแกรม C) รหัสทางออกที่ส่งคืนจากสคริปต์ทุบตี (เมื่อโทรexit) รหัสทางออกที่ส่งคืนจากฟังก์ชัน (เมื่อโทรreturn) ผมคิดว่านี่เป็นเรื่องระหว่างและ0255

5
คำสั่ง Unix ที่ส่งคืนรหัสส่งคืนทันทีหรือไม่
มีคำสั่ง Unix มาตรฐานที่ทำสิ่งที่คล้ายกับตัวอย่างของฉันด้านล่าง $ <cmd here> 56 $ echo Return code was $? Return code was 56 $ <cmd here>ควรเป็นสิ่งที่สามารถ fork-execed และปล่อยให้ 56 เป็นรหัสทางออกเมื่อกระบวนการออก exitและreturnเปลือก builtins ไม่เหมาะสมสำหรับสิ่งที่ฉันกำลังมองหาเพราะพวกเขามีผลต่อการกล่าวอ้างเปลือกตัวเองด้วยการออกออกมาจากมัน <some cmd>ควรเป็นสิ่งที่ฉันสามารถดำเนินการในบริบทที่ไม่ใช่เปลือก - เช่นเรียกจากสคริปต์ Python subprocessด้วย เช่น/usr/bin/falseออกจากทันทีด้วยรหัสส่งคืน 1 แต่ฉันต้องการควบคุมรหัสที่ส่งคืนนั้นอย่างแน่นอน ฉันสามารถบรรลุผลลัพธ์เดียวกันโดยเขียนสคริปต์ตัวคลุมของฉันเอง $ cat my-wrapper-script.sh # i.e., <some cmd> = ./my-wrapper-script.sh #!/usr/bin/bash exit $1 $ …

1
การค้นหาไฟล์ที่คำสั่งล้มเหลว
ฉันต้องการค้นหาไฟล์ทั้งหมดซ้ำที่สคริปต์ซึ่งยอมรับไฟล์เนื่องจากอาร์กิวเมนต์ส่งคืนค่าที่ไม่เป็นศูนย์ มีความคิดวิธีการทำเช่นนี้โดยใช้ 'ค้นหา' หรือเครื่องมือที่คล้ายกัน?

2
รหัสจบการทำงานท้ายสคริปต์ทุบตี
ฉันสับสนเกี่ยวกับความหมายของรหัสออกในตอนท้ายของสคริปต์ทุบตี: ฉันรู้ว่ารหัสออก 0 หมายความว่าเสร็จสมบูรณ์และมีหมายเลขรหัสทางออกอื่นอีกมากมาย (127 ถ้าฉันไม่เข้าใจผิด?) คำถามของฉันเกี่ยวกับเมื่อเห็นรหัสออก 0 ที่ท้ายสคริปต์มันบังคับให้รหัสออกเป็น 0 แม้ว่าสคริปต์จะล้มเหลวหรือมีความหมายอื่นหรือไม่

5
การพิมพ์เครื่องหมายอัศเจรีย์เดียวทำอะไรใน Bash
Bash ใช้เครื่องหมายอัศเจรีย์สำหรับการขยายประวัติตามที่อธิบายในคำตอบสำหรับคำถามนี้ (เช่นsudo !!เรียกใช้บรรทัดคำสั่งก่อนหน้าด้วยsudo) อย่างไรก็ตามฉันไม่พบที่ใดก็ได้ที่อธิบายสิ่งที่เรียกใช้คำสั่งต่อไปนี้ (เช่นเครื่องหมายอัศเจรีย์): ! ดูเหมือนว่าจะพิมพ์อะไรและออกด้วย 1 แต่ฉันไม่แน่ใจว่าทำไมมันถึงทำอย่างนั้น ฉันดูออนไลน์และในหน้า Bash man แต่ไม่พบอะไรเลยนอกจากความจริงที่ว่ามันเป็น "คำสงวน" - แต่เป็นเช่นนั้น}และใช้งานสิ่งนี้: } พิมพ์ข้อผิดพลาด: bash: syntax error near unexpected token `}'

3
บันทึกรหัสออกในภายหลัง
ดังนั้นฉันจึงมีสคริปต์เล็กน้อยสำหรับการทดสอบบางอย่าง javac *.java && java -ea Test rm -f *.class ตอนนี้ปัญหาของเรื่องนี้ก็คือเมื่อฉันเรียกใช้สคริปต์./testก็จะส่งกลับรหัสทางออกที่ประสบความสำเร็จแม้ว่าการทดสอบล้มเหลวเพราะrm -f *.classประสบความสำเร็จ วิธีเดียวที่ฉันสามารถคิดให้มันทำในสิ่งที่ฉันต้องการรู้สึกน่าเกลียด: javac *.java && java -ea Test test_exit_code=$? rm -f *.class if [ "$test_exit_code" != 0 ] ; then false; fi แต่ดูเหมือนว่ามีปัญหาบางอย่างที่พบได้ทั่วไป - ทำงานทำความสะอาดแล้วส่งคืนรหัสทางออกของงานต้นฉบับ อะไรคือวิธีที่ใช้สำนวนที่สุดในการทำสิ่งนี้ (โดยทั่วไปคือทุบตีหรือแค่กระสุน)?

5
หนึ่งจะแยกสถานะการออกของคำสั่งลงในตัวแปรได้อย่างไร
ฉันเริ่มเรียนรู้การทุบตีเมื่อสองสามวันก่อน ฉันพยายามรับสถานะทางออกของgrepการแสดงออกเป็นตัวแปรเช่นนี้ check=grep -ci 'text' file.sh และผลลัพธ์ที่ฉันได้รับคือ No command '-ic' found ฉันควรทำด้วยคำสั่งไพพ์หรือไม่?

3
ทำไมฉันถึงได้รับสถานะการออกที่แตกต่างกันสำหรับ ps | grep ในสคริปต์หรือไม่
ฉันใช้สคริปต์ด้านล่าง: #!/bin/bash ps ax | grep -q [v]arnish if [ $? -eq 0 ];then echo varnish is running... exit 0 else echo "Critical : varnish is not running " exit 2 fi ผลลัพธ์เป็นเหมือน :: [root@server ~]# sh -x check_varnish_pro.sh + ps ax + grep -q '[v]arnish' + '[' 0 -eq …

2
วิธีทำให้ `local` จับรหัสทางออกได้อย่างไร
ในโครงการของฉันฉันมีตัวอย่างต่อไปนี้: local output="$(bash "${1##*/}")" echo "$?" สิ่งนี้จะพิมพ์ค่าศูนย์เนื่องจากการlocalลบlocalจะทำให้$?ตัวแปรทำงานได้อย่างถูกต้อง: ซึ่งจะถือว่ารหัสการออกจาก subshell คำถามของฉันคือ: ฉันจะเก็บตัวแปรนี้ไว้ในตัวเครื่องได้อย่างไรในขณะที่ยังเก็บค่าการออกได้

4
Bash script เพื่อตรวจหาระบบควบคุมเวอร์ชันโดยการทดสอบสถานะการส่งคืนคำสั่ง
ฉันกำลังทำงานกับสคริปต์ทุบตีที่ฉันต้องการทำงานกับ VCS หลายประเภท ฉันคิดว่าการทดสอบว่าไดเรกทอรีเป็น repo สำหรับระบบโดยใช้คำสั่งข้อมูลทั่วไปและตรวจสอบรหัสส่งคืนสำเร็จหรือข้อผิดพลาด ในรหัสหลอก: if a svn command succeded; Then run svn commands elif a darcs command succeded; Then run darcs commands elif a mercurial command succeded; then run hg commands else something else fi ฉันสามารถเรียกใช้คำสั่งเช่น darcs show repoและใช้$?เพื่อรับรหัสส่งคืน คำถามของฉันคือมีวิธีเรียกใช้และส่งคืนหมายเลขรหัสส่งคืนในบรรทัดเดียวหรือไม่ ตัวอย่างเช่น if [ 0 -eq `darcs show …

2
ENOANO (ไม่มีขั้วบวก) มีไว้เพื่ออะไร
คำถามนี้เป็นเพียงความอยากรู้ที่ไม่ได้ใช้งาน แต่ฉันสงสัยว่าคนอื่นจะอยากรู้อยากเห็นเช่นกัน การค้นหา errno.h (จาก Linux 2.6) ฉันพบ ENOANO "No Anode" ไม่มีสัญญาณของข้อผิดพลาด "ไม่มีแคโทด" เมื่อมองผ่านความสอดคล้องของแหล่งที่มาของเคอร์เนลดูเหมือนว่าจะไม่ถูกใช้โดยอุปกรณ์ที่เรียกว่าแอโนดซึ่งเป็นรหัสข้อผิดพลาดที่ผิดปกติอย่างจงใจโดยไดรเวอร์อุปกรณ์ที่ไม่ชัดเจน Googling เปิดเผยว่าไม่มีอะไรน่าสนใจ มันอาจเป็นเรื่องตลกหรือไม่? มันกำหนดไว้ในเอกสารมาตรฐานเช่น POSIX แต่ไม่มีประโยชน์หรือไม่?

5
จับรหัสทางออกของคำสั่ง exit
ฉันมีสิ่งนี้ในสคริปต์ทุบตี: exit 3; exit_code="$?" if [[ "$exit_code" != "0" ]]; then echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}"; exit "$exit_code"; fi ดูเหมือนว่าจะออกทันทีหลังจากคำสั่ง exit ซึ่งทำให้รู้สึก ฉันสงสัยว่าจะมีคำสั่งง่ายๆที่สามารถให้รหัสออกโดยไม่ต้องออกทันทีหรือไม่ ฉันจะเดา: exec exit 3 exec: exit: not foundแต่จะให้ข้อความแสดงข้อผิดพลาด: ฉันควรทำอย่างไร :)

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