Score:0

อะไรคือความแตกต่างระหว่าง "command.sh > /dev/null 2>&1" กับ "command.sh 2>&1 >/dev/null"

ธง us

ฉันมีสคริปต์เชลล์และไพ ธ อนมากมายบน crontab ที่ลงท้ายด้วย:

command.sh > /dev/null 2>&1

หรือ

command.sh 2>&1 >/dev/null

ฉันรู้แล้ว:

> มีไว้สำหรับเปลี่ยนเส้นทาง

/dev/null เป็นหลุมดำที่ข้อมูลที่ส่งไปจะถูกทิ้ง

2 เป็นตัวอธิบายไฟล์สำหรับข้อผิดพลาดมาตรฐาน

> มีไว้สำหรับเปลี่ยนเส้นทาง

& เป็นสัญลักษณ์สำหรับตัวอธิบายไฟล์ (หากไม่มี 1 ต่อไปนี้จะถือว่าเป็นชื่อไฟล์)

1 เป็นตัวอธิบายไฟล์สำหรับ Standard Out

ดังนั้น command.sh >/dev/null 2>&1 เปลี่ยนเส้นทางเอาต์พุตของโปรแกรมไปที่ /dev/null รวมทั้งข้อผิดพลาดมาตรฐานและมาตรฐานออก

ทั้งสองมีผลลัพธ์เหมือนกันและใช้งานได้ดี แต่ทำไมบางคนใช้ประเภทแรกและบางคนใช้อีกประเภทหนึ่ง

Score:1
ธง ng

คำสั่งกำลังดำเนินการเปลี่ยนเส้นทางสองครั้ง:

  • > /dev/null เปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปที่ /dev/null
  • 2>&1 เปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปยังเอาต์พุตมาตรฐาน

ตามที่คุณเดาได้ถูกต้อง ผลโดยรวมคือทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานถูกเปลี่ยนเส้นทางไป /dev/null.

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

TL;DR: คำสั่งทั้งสองนั้นเทียบเท่ากันอย่างสมบูรณ์ ความแตกต่างนั้นเป็นเพียงเครื่องสำอางเท่านั้น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา