ชื่อที่ถูกต้องสำหรับคำสั่ง“>” คืออะไร


38

ฉันพยายามค้นหาวิธีส่งข้อความไปยังไฟล์โดยไม่เขียนทับสิ่งที่มีอยู่แล้วโดยใช้>คำสั่งและฉันก็รู้ว่าไม่รู้ว่ามันเรียกอะไร ค้นหาลูกศรขวาหรือเครื่องหมายบั้งขวาหรือมากกว่าคำสั่งไม่แสดงอะไร ฉันเคยเรียกว่าเพียงแค่มันผ่านไป

คำตอบ:


53

>ไม่ใช่คำสั่ง แต่เป็นการเปลี่ยนเส้นทางไฟล์ descriptor ซึ่งหมายความว่าเชลล์แยกวิเคราะห์การมอบหมายนี้ลบออกจากบรรทัดคำสั่งและเปลี่ยนสภาพแวดล้อมสำหรับกระบวนการใหม่ที่เริ่มต้น กระบวนการใหม่ไม่ได้สังเกตเห็นส่วนนี้ของบรรทัดคำสั่ง นั่นคือเหตุผลที่คุณสามารถใส่ได้ทุกที่: ในตอนต้น, ตอนท้ายหรือระหว่าง

มองหากระชากREDIRECTIONman bash

>>เพื่อที่จะผนวกไปยังแฟ้มที่มีอยู่ที่คุณจำเป็นต้องใช้


หากnoclobberมีการตั้งค่าตัวเลือกไว้>|จะมีการแทนที่และอนุญาตให้แก้ไขไฟล์ได้
bsd

30

>เป็นผู้ประกอบการเปลี่ยนเส้นทาง โปรดทราบว่าการใช้>เพื่อเปลี่ยนเส้นทางไปยังไฟล์ปกติจะเขียนทับสิ่งที่มีอยู่แล้วยกเว้นว่ามีการตั้งค่าnoclobber >>จะต่อท้ายไฟล์


และจะไม่เขียนทับหากnoclobberได้รับการตั้งค่า (ทุบตี)
Hauke ​​Laging

อัปเดตคำตอบของฉันขอบคุณสำหรับคำชี้แจง
Josh Jolly

5
@HaukeLaging noclobberไม่ได้เป็นเพียงแค่ความน่าเบื่อหน่าย มันเป็นส่วนหนึ่งของ POSIX
kojiro

6

อย่างที่คนอื่น ๆ ตอบแล้ว>ไม่ใช่คำสั่ง แต่เป็นตัวดำเนินการเปลี่ยนเส้นทาง อย่างไรก็ตามคำว่า 'โอเปอเรเตอร์การเปลี่ยนเส้นทาง' ไม่ได้อ้างถึงเฉพาะ>แต่มีโอเปอเรเตอร์การเปลี่ยนเส้นทางที่แตกต่างกันจำนวนหนึ่ง dashรายการหน้าคนดังต่อไปนี้เป็นผู้ประกอบการเปลี่ยนเส้นทาง:

 < > >| << >> <& >& <<- <>

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

>  - 'output redirection operator'
<  - 'input redirection operator'
>> - 'output append operator'

แต่ยัง:

2> - 'standard error redirection operator'

อย่างไรก็ตามฉันไม่คิดว่ามันถูกต้องจริงๆเพราะ2เป็นข้อโต้แย้งทางเทคนิคมากกว่าส่วนหนึ่งของโอเปอเรเตอร์

ข้อมูลอ้างอิงอย่างรวดเร็ว (ในกรณีที่คุณไม่รู้จักข้อใดข้อหนึ่งข้างต้น):

>   - redirect output stream to a file, eg >somefile (for stdout) or 2>somefile
>|  - as above but overwrite the file even if the noclobber shell option is set
>>  - append output stream to file
<   - redirect input stream from file, n defaults to 0 for stdin
<>  - open file for reading and writing on stdin
>&  - redirect output stream to another stream (eg >&1) or close with - (eg 2>&-)
<<  - here document - see http://en.wikipedia.org/wiki/Here_document
<<- - here document with leading tabs removed.

ในตัวbashคุณยังมี:

<<< - here string, a one line here file. Eg <<<"foo bar"

รายการอ้างอิงด่วนดีมาก แต่ไม่<<-ลบแท็บและช่องว่างนำหน้าใช่ไหม
iconoclast

@iconoclast ไม่แน่นอนเพียงแค่แท็บ
แกรม

0

> เปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ (หรืออุปกรณ์) เขียนทับสิ่งที่มีอยู่แล้วที่นั่น

>> เปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ (หรืออุปกรณ์) ต่อท้ายสิ่งที่มีอยู่แล้วที่นั่น

< นำข้อมูลจากไฟล์ (หรืออุปกรณ์) ไปยังโปรแกรมหรืออุปกรณ์

<< เอกสารที่นี่



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