chmod + โหมดเงียบ + วิธีบังคับให้ออกรหัส 0 แม้มีข้อผิดพลาด


37

มันเป็นไปได้รัน chmod และละเว้นข้อผิดพลาดจากคำสั่ง

ตัวอย่าง (หมายเหตุ file.txt ไม่แสดงเพื่อแสดงตัวอย่าง)

เมื่อฉันพิมพ์

chmod 777 file.txt

ฉันได้รับข้อผิดพลาดในผลลัพธ์

  chmod: cannot access file.txt : no such file or directory

ดังนั้นฉันจึงเพิ่มแฟล็ก -f ลงในคำสั่งดังต่อไปนี้: (file.txt ไม่มีอยู่เพื่อแสดงเคส)

  chmod -f 777 file.txt
  echo $?
  1

แต่จากตัวอย่าง chmod ส่งคืน 1

โปรดแนะนำวิธีการบังคับให้คำสั่ง chmod ให้รหัสทางออก 0 ทั้งๆที่มีข้อผิดพลาด


เหตุใดจึง upvoted ไม่แสดงเอาต์พุตที่ไม่ต้องการด้วย2>/dev/nullและใช้set -eในสคริปต์
ott--

คำตอบ:


47

โปรดแนะนำวิธีการบังคับให้คำสั่ง chmod ให้รหัสทางออก 0 ทั้งๆที่มีข้อผิดพลาด

chmod -f 777 file.txt || :

สิ่งนี้จะดำเนินการ:เช่นคำสั่ง null ถ้าchmodล้มเหลว เนื่องจากคำสั่ง null ไม่ทำอะไรเลย แต่จะประสบความสำเร็จเสมอคุณจะเห็นรหัสออกเป็น 0


25
เทียบเท่า แต่อ่านได้ง่ายกว่าสำหรับผู้ใช้ทั่วไปคือการใช้chmod -f 777 file.txt || true
orion

2
@orion ขึ้นอยู่กับ หากมีใครคุ้นเคยก็:ดูเหมือนว่าสามารถอ่านได้อย่างเท่าเทียมกัน
devnull

2
แต่ถ้าเราเขียนโค้ดที่อ่านได้มากขึ้นซึ่ง noobs สามารถอ่านได้เราจะรักษางานของเราได้อย่างไร?
Nick T

1
ผู้พัฒนาพ่อครัวที่นี่เพียงวางคำสำคัญเพื่อช่วยเหลือผู้อื่นที่พบปัญหาเดียวกันกับที่ฉันมี shell_out! (cmd + '|| true') เป็นผู้ช่วยชีวิตเมื่อคุณพยายามที่จะใช้ idempotent กับการติดตั้งและต้องการละเว้น shell_out! รวบรวมข้อผิดพลาด
JackChance

53

chmod -f 777 file.txt || true

เนื่องจากเป็น OR ถ้าข้อความใดคำสั่งหนึ่งคืนค่าเป็นจริงการส่งคืนจะเป็นจริง ส่งผลให้สถานะการออกเป็นศูนย์


3
ฉันเพิ่มคำตอบนี้เป็นอีกทางเลือกหนึ่งในการส่งเสริมการฝึกการเขียนโค้ดที่อ่านได้
Gerry

2
สาขาที่ถูกต้องของ||จะไม่ถูกดำเนินการถ้าchmodประสบความสำเร็จ ... ไม่ใช่ว่ามันสร้างความแตกต่างในการคำนวณที่นี่
dhag

ขอบคุณสำหรับสิ่งนั้น. ฉันไม่อยากจะเชื่อเลย :) แก้ไขด้วยการแก้ไข
Gerry

5

ฉันรักเสมอ

 chmod -f 777 file.txt || exit 0

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