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

3
รอการใช้คำสั่งใน Linux หรือไม่
#!/bin/bash function back() { sleep $1 exit $2 } back $1 $2 & b=$! if `wait $!`;then echo success else echo failure fi bash-3.00# ./back 300 0 failure bash-3.00# ./back 300 1 failure ผมคาดหวังว่าsuccessเป็นสถานะออกเมื่อฉันส่ง 0 failureแต่ฉันยังคงได้รับ นอกจากนี้waitไม่ต้องรอเป็นเวลา 300 วินาที แต่ฉันได้รับข้อความทันที ฉันถือว่า$!เป็นลูกของ$$สคริปต์ ไม่ใช่เหรอ สามารถจับสถานะทางออกของการรอได้exit_status=$(wait $!)หรือไม่? if ! ((exit_status));then echo sucess else …

6
การใช้รหัส“ สงวน” สำหรับสถานะการออกของเชลล์สคริปต์
ฉันเพิ่งเจอรายการรหัสทางออกนี้ด้วยความหมายพิเศษจากคู่มือการใช้สคริปต์การทุบตีขั้นสูง พวกเขาอ้างถึงรหัสเหล่านี้เป็นการสงวนและแนะนำว่า: ตามตารางด้านบนรหัสทางออก 1-2, 126-165 และ 255 มีความหมายพิเศษและควรหลีกเลี่ยงสำหรับพารามิเตอร์ทางออกที่ผู้ใช้ระบุ ไม่นานมานี้ฉันเขียนสคริปต์ซึ่งใช้รหัสสถานะการออกต่อไปนี้: 0 - สำเร็จ 1 - ชื่อโฮสต์ไม่ถูกต้อง 2 - ระบุอาร์กิวเมนต์ที่ไม่ถูกต้อง 3 - สิทธิ์ผู้ใช้ไม่เพียงพอ เมื่อฉันเขียนสคริปต์ฉันไม่ทราบรหัสทางออกพิเศษดังนั้นฉันจึงเริ่มต้นที่ 1 สำหรับเงื่อนไขข้อผิดพลาดแรกและเพิ่มสถานะทางออกสำหรับแต่ละประเภทข้อผิดพลาดต่อเนื่อง ฉันเขียนสคริปต์ด้วยความตั้งใจว่าในเวลาต่อมาสคริปต์อื่น ๆ สามารถเรียกใช้ได้ (ซึ่งสามารถตรวจสอบรหัสทางออกที่ไม่เป็นศูนย์) ฉันยังไม่ได้ทำอย่างนั้นจริง ๆ ; จนถึงตอนนี้ฉันแค่เรียกใช้สคริปต์จากเชลล์เชิงโต้ตอบของฉัน (Bash) และฉันสงสัยว่าจะเกิดอะไรขึ้นหากใช้รหัสทางออกที่กำหนดเอง คำแนะนำจากคู่มือ Bash-Scripting ขั้นสูงมีความเกี่ยวข้อง / สำคัญเพียงใด ฉันไม่พบคำแนะนำการยืนยันใด ๆ ในเอกสาร Bash; ส่วนของมันที่สถานะการออกเพียงแค่แสดงรหัสทางออกที่ใช้โดย Bash แต่ไม่ได้ระบุว่าสิ่งเหล่านี้สงวนไว้หรือเตือนให้ใช้สำหรับสคริปต์ / โปรแกรมของคุณเอง

4
คำสั่ง exit ทำงานบนเทอร์มินัล Unix อย่างไร
ใครช่วยกรุณาอธิบายว่าexitคำสั่งทำงานอย่างไรในเทอร์มินัล Unix? การค้นหาman exit และwhich exitไม่เป็นประโยชน์และฉันได้เจอปัญหาต่อไปนี้ หลังจากติดตั้ง add บนแพ็คเกจสำหรับ Anaconda และ PyCharm ในระบบ Red Hat ใหม่ของฉันฉันสังเกตเห็นว่าเมื่อใดก็ตามที่ฉันถูกเรียกexitให้ออกจากเซสชันเทอร์มินัลฉันจะได้รับข้อผิดพลาดหลายชุดจากนั้นเทอร์มินัลจะหยุด ข้อผิดพลาดดูเหมือนจะแนะนำว่าการโทรของฉันexitกำลังเรียกการโทรrm ~/anaconda3/.../และrm ~/PyCharm/....ทำให้เกิดข้อผิดพลาด ไดเรกทอรีทั้งหมดดูเหมือนจะเป็นที่ตั้งของแพ็คเกจที่ฉันดาวน์โหลดสำหรับโปรแกรมเหล่านี้ (เช่นจำนวนมาก) ดูด้านล่าง $ exit rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory ... ... การแก้ไข ใน~/.bash_logoutไฟล์ของฉันมีบรรทัด find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm …


3
รหัสส่งคืนที่เชื่อถือได้ของกระบวนการพื้นหลัง
สมมติว่าชิ้นส่วนของรหัสทุบตีต่อไปนี้: foo > logfile 2>&1 & foo_pid=$! while ps -p$foo_pid do ping -c 1 localhost done wait $foo_pid if [[ $? == 0 ]] then echo "foo success" fi มีความปลอดภัยหรือไม่ที่จะสมมติว่า$?มีรหัสส่งคืนของfooและไม่ใช่รหัสส่งคืนpingใช่หรือไม่ หากคำตอบของคำถามนั้นคือ: "คุณไม่สามารถสันนิษฐานได้" แล้วฉันจะแก้ไขรหัสชิ้นนี้เพื่อให้แน่ใจว่า$?มีรหัสที่ส่งคืนได้fooอย่างไร

4
เก็บรหัสทางออกเมื่อวางกับ SIGINT และคล้ายกันหรือไม่
หากฉันใช้trapเช่นอธิบายไว้ในhttp://linuxcommand.org/wss0160.php#trapเพื่อจับ ctrl-c (หรือคล้ายกัน) และการล้างข้อมูลก่อนออกจากนั้นฉันจะเปลี่ยนรหัสออกที่ส่งคืน ตอนนี้อาจจะไม่สร้างความแตกต่างในโลกแห่งความเป็นจริง (เช่นเพราะรหัสออกไม่ได้พกพาและด้านบนของที่ไม่โปร่งใสตลอดเวลาตามที่กล่าวไว้ในรหัสทางออกเริ่มต้นเมื่อกระบวนการสิ้นสุดลง? ) แต่ฉันสงสัยว่ามี จริงๆแล้วไม่มีวิธีในการป้องกันและส่งคืนรหัสข้อผิดพลาดเริ่มต้นสำหรับสคริปต์ที่ถูกขัดจังหวะแทนหรือไม่ ตัวอย่าง (เป็น bash แต่คำถามของฉันไม่ควรพิจารณาเฉพาะ bash): #!/bin/bash trap 'echo EXIT;' EXIT read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _ trap 'echo SIGINT; exit 1;' INT read -p 'If you ctrl-c me now …

4
ฉันจะจับรหัสทางออก / จัดการผิดได้อย่างถูกต้องเมื่อใช้การทดแทนกระบวนการได้อย่างไร
ฉันมีสคริปต์ที่แยกวิเคราะห์ชื่อไฟล์ลงในอาร์เรย์โดยใช้วิธีการต่อไปนี้ที่นำมาจากQ&A บน SO : unset ARGS ARGID="1" while IFS= read -r -d $'\0' FILE; do ARGS[ARGID++]="$FILE" done < <(find "$@" -type f -name '*.txt' -print0) วิธีนี้ใช้งานได้ดีและจัดการรูปแบบชื่อไฟล์ทุกประเภทได้อย่างสมบูรณ์แบบ อย่างไรก็ตามบางครั้งฉันจะส่งไฟล์ที่ไม่มีอยู่ไปยังสคริปต์เช่น: $ findscript.sh existingfolder nonexistingfolder find: `nonexistingfile': No such file or directory ... ภายใต้สถานการณ์ปกติฉันจะให้สคริปต์จับรหัสออกด้วยสิ่งที่ชอบRET=$?และใช้เพื่อตัดสินใจว่าจะดำเนินการอย่างไร ดูเหมือนจะไม่ทำงานกับการทดแทนกระบวนการด้านบน ขั้นตอนที่ถูกต้องในกรณีเช่นนี้คืออะไร? ฉันจะจับรหัสส่งคืนได้อย่างไร มีวิธีอื่นที่เหมาะสมกว่าหรือไม่ในการพิจารณาว่ามีบางอย่างผิดพลาดในกระบวนการทดแทนหรือไม่

4
ทำไมลูกของ vfork หรือ fork call _exit () แทนที่จะออก ()
จากหน้าคนของvfork(): vfork () แตกต่างจาก fork () ซึ่งผู้ปกครองจะถูกระงับจนกว่าเด็กจะเรียกร้องให้ execve (2) หรือ _exit (2) ชายด์แบ่งใช้หน่วยความจำทั้งหมดกับพาเรนต์รวมถึงสแต็กจนกว่า execve () จะออกโดยเด็ก เด็กต้องไม่ส่งคืนจากฟังก์ชันปัจจุบันหรือ call exit () แต่อาจเรียก _exit () ทำไมเด็กควรใช้_exit()มากกว่าเพียงแค่การเรียกร้องexit()? ฉันหวังว่านี้สามารถใช้ได้กับทั้งสองและvfork()fork()
12 c  system-calls  fork  exit 

3
ออกจากฟังก์ชัน bash ไม่ใช่เทอร์มินัล
ฉันมีสคริปต์ทุบตีด้านล่างซึ่งติดตั้ง Zookeeper แต่ถ้าไม่ได้ติดตั้งแล้ว ##zookeper installZook(){ ZOOK_VERSION="3.4.5" ZOOK_TOOL="zookeeper-${ZOOK_VERSION}" ZOOK_DOWNLOAD_URL="http://www.us.apache.org/dist/zookeeper/${ZOOK_TOOL}/${ZOOK_TOOL}.tar.gz" if [ -e $DEFAULT_INSTALLATION_DEST/${ZOOK_TOOL} ]; then echo "${ZOOK_TOOL} alreay installed"; exit 1; # <<<< here elif [ ! -e $DEFAULT_SOURCE_ROOT/${ZOOK_TOOL}.tar.gz ]; then wgetIt $ZOOK_DOWNLOAD_URL else echo "[info] : $DEFAULT_SOURCE_ROOT/$ZOOK_TOOL already exists" fi sudo mkdir -p /var/lib/zookeeper sudo mkdir -p /var/log/zookeeper tarIt "$DEFAULT_SOURCE_ROOT/$ZOOK_TOOL.tar.gz" …

4
การออกจากเชลล์สคริปต์ด้วยลูปซ้อนกัน
ฉันมีเชลล์สคริปต์ที่มีลูปซ้อนกันและเพิ่งพบว่า "exit" ไม่ได้ออกจากสคริปต์จริงๆ แต่เป็นลูปปัจจุบันเท่านั้น มีวิธีการออกจากสคริปต์อย่างสมบูรณ์ในเงื่อนไขข้อผิดพลาดบางอย่างหรือไม่ ฉันไม่ต้องการใช้ "set -e" เนื่องจากมีข้อผิดพลาดที่ยอมรับได้และจะต้องเขียนใหม่มากเกินไป ตอนนี้ฉันกำลังใช้ kill เพื่อฆ่ากระบวนการด้วยตนเอง แต่ดูเหมือนว่าควรมีวิธีที่ดีกว่าในการทำเช่นนี้
11 bash  shell  scripting  exit 

3
การปิดเชลล์ทำได้อย่างปลอดภัยเพียงแค่คลิก“ X” หรือใช้“ ctrl + d”
การปิดเชลล์ทำได้อย่างปลอดภัยเพียงแค่คลิก "X" หรือใช้ "ctrl + d" ในขณะที่ล็อกอินด้วยรูทด้วย su หรือปลอดภัยกว่าหรือไม่ถ้าต้องการปิดโดยการพิมพ์ "exit" มีความแตกต่าง (การรักษาความปลอดภัยที่ชาญฉลาด) หรือเหมือนกันและมันไม่สำคัญว่าคุณจะใช้วิธีใด?

2
ทำไม vfork () ตั้งใจที่จะใช้เมื่อกระบวนการลูกเรียก exec () หรือ exit () ทันทีหลังจากการสร้าง?
แนวคิดระบบปฏิบัติการและ APUE พูด ด้วย vfork () กระบวนการหลักถูกระงับและกระบวนการลูกใช้พื้นที่ที่อยู่ของพาเรนต์ เนื่องจาก vfork () ไม่ได้ใช้ copy-on-write ถ้ากระบวนการลูกเปลี่ยนแปลงหน้าใด ๆ ของพื้นที่ที่อยู่ของผู้ปกครองเพจที่ถูกแก้ไขจะปรากฏให้ผู้ปกครองเห็นได้เมื่อดำเนินการต่อ ดังนั้นvfork () ต้องใช้ด้วยความระมัดระวังเพื่อให้แน่ใจว่ากระบวนการลูกไม่ได้แก้ไขพื้นที่ที่อยู่ของผู้ปกครอง vfork () มีวัตถุประสงค์เพื่อใช้เมื่อกระบวนการลูกเรียกใช้ exec () หรือ exit () ทันทีหลังจากการสร้าง ฉันจะเข้าใจประโยคสุดท้ายได้อย่างไร เมื่อกระบวนการลูกสร้างโดยการvfork()โทรexec()ไม่ได้exec()แก้ไขพื้นที่ที่อยู่ของกระบวนการหลักโดยการโหลดโปรแกรมใหม่หรือไม่ เมื่อกระบวนการลูกที่สร้างโดยการvfork()โทรexit()ไม่ exit()ได้แก้ไขพื้นที่ที่อยู่ของกระบวนการหลักเมื่อยกเลิกการเป็นเด็ก? ฉันชอบลีนุกซ์ ขอบคุณ
11 linux  process  exec  exit  vfork 

3
เรียกสคริปต์สำหรับสคริปต์อื่น แต่อย่าออกจากพาเรนต์ถ้าลูกเรียกออก
first.sh: #! /bin/ksh echo "prova" . ./second.sh echo "ho lanciato il secondo" . ./third.sh echo "ho lanciato il terzo" second.sh: echo "sono nel secondo script" dosomething1 exit $? หากsecond.shตรวจพบข้อผิดพลาดและออกด้วยสถานะ -9 ให้first.shออกเสมอ ฉันจะหลีกเลี่ยงการออกจากเปลือกแรกได้อย่างไรถ้าเปลือกลูกออก? second.shฉันไม่สามารถแก้ไข

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แต่จะให้ข้อความแสดงข้อผิดพลาด: ฉันควรทำอย่างไร :)

7
บันทึกรหัสทางออกของคำสั่งคล้ายกับคำสั่งเวลา
การใช้ time sleep 1 อัตราผลตอบแทน: $ time sleep 1 real 0m1.005s user 0m0.001s sys 0m0.001s มีคำสั่งที่ฉันสามารถใช้พิมพ์รหัสทางออกsleepหรือคำสั่งใดที่ฉันต้องการเรียกใช้หรือไม่ บางสิ่งที่ชอบ: $ log-exit-code sleep 1 อาจเพียงพอหรือไม่ sleep 1 && echo "$?"
10 exit  exit-status 

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