อะไรคือความแตกต่างระหว่าง“>” และ“ >>” ในคำสั่งเชลล์?


45

ใครช่วยอธิบายความแตกต่างระหว่าง>และ>>เมื่อใช้คำสั่งเชลล์ได้ไหม

ตัวอย่าง:

ps -aux > log
ps -aux >> log

ดูเหมือนว่าผลลัพธ์จะเหมือนกันทั้งสองวิธี


2
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโอเปอเรเตอร์ bash โปรดดูที่<<, <<< และ <<ใน bash ต่างกันอย่างไร?
Sergiy Kolodyazhnyy

คำตอบ:


48

>ใช้เพื่อเขียนทับ (“ clobber ”) ไฟล์และ>>ใช้เพื่อผนวกเข้ากับไฟล์

ดังนั้นเมื่อคุณใช้ps aux > fileเอาต์พุตของps auxจะถูกเขียนไปยังfileและหากไฟล์ที่มีชื่อfileมีอยู่แล้วเนื้อหานั้นจะถูกเขียนทับ

และถ้าคุณใช้ps aux >> fileการส่งออกของps auxจะถูกเขียนไปfileและหากไฟล์ชื่อfileอยู่แล้วในปัจจุบันไฟล์ในขณะนี้จะมีเนื้อหาก่อนหน้านี้และเนื้อหาของps aux, fileเขียนขึ้นหลังจากที่เนื้อหาเก่าของ


11

ถ้าคุณเขียนใน terminal

ps aux > log

มันจะใส่ผลลัพธ์ของps auxการเข้าสู่ระบบไฟล์ที่มีชื่อ

ถ้าคุณใส่

ps aux >> log

จากนั้นเอาต์พุตถัดไปจะถูกต่อท้ายด้านล่างอันแรก หากคุณใส่เพียงไฟล์เดียว>มันจะเขียนทับไฟล์ก่อนหน้า


4

ใช่>>ผนวก>เขียนทับ / ทำลายเนื้อหาก่อนหน้าเสมอ

ps -aux > log

เป็นเช่นเดียวกับ

rm log 2>/dev/null
ps -aux >> log

เมื่อวันที่ Wintel มันจะเหมือนกันสำหรับ.bat, .cmdและ.ps1สคริปต์เกินไป มรดกร่วมกันสามัญสำนึก


3

ความแตกต่างที่สำคัญที่สุดคือ>ทำให้เชลล์เปิดไฟล์หรือวัตถุที่มีลักษณะคล้ายไฟล์ที่มีO_WRONLY|O_CREAT|O_TRUNCแฟล็กไฟล์จะถูกสร้างหรือตัดทอนถ้ามีอยู่ขณะที่>>เปิดไฟล์ที่มีO_WRONLY|O_CREAT|O_APPENDแฟล็ก - ไฟล์จะถูกสร้างหรือต่อท้ายหากมีอยู่ สิ่งนี้จะชัดเจนหากคุณติดตามการโทรของระบบเช่น

$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1

และด้วย

$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1
+++ exited with 0 +++

โปรดสังเกตว่าในทั้งสองกรณีตัวอธิบายไฟล์ของไฟล์ที่เปิดอยู่จะถูกทำซ้ำไปยังไฟล์ตัวอธิบาย 1 (stdout) ของคำสั่งและจะได้รับการสืบทอดโดยคำสั่งใด ๆ ก็ตามที่เชลล์ forks ใช้

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