`>>` có nghĩa là gì trong lệnh terminal?


14

Tôi đã bắt gặp một lệnh vừa được đưa ra dưới đây -

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

Từ những gì tôi có thể đoán, nó có thể được sử dụng để thực hiện các thay đổi trong .bash_profile nhưng chính xác thì nó được sử dụng để làm gì?


26
Chỉ để cho bạn biết những gì cần cải thiện trong tương lai: man bashđược viết với một ngôn ngữ khá chính thức, nó có thể khó hiểu. Mặt khác, cụm từ bash >>trả về một vài liên kết hữu ích trong Google. Đúng là chúng tôi muốn tổng hợp kiến ​​thức mà không cần dựa vào Google; vì lý do này, ngay cả một câu hỏi với câu trả lời dễ tìm kiếm có thể phù hợp. Tuy nhiên, thực tế bạn không cung cấp câu trả lời ngay lập tức (xem Tôi có thể trả lời câu hỏi của riêng tôi không? ) Cũng không chỉ ra các tài nguyên hiện có (mà bạn có thể cần trợ giúp để hiểu) cho thấy thiếu nghiên cứu.
Kamil Maciorowski

5
Để biết tổng quan chi tiết về các toán tử chuyển hướng dòng lệnh, hãy xem unix.stackexchange.com/q/159513/85039
Sergiy Kolodyazhnyy

Câu trả lời:


31

Nó chuyển hướng thiết bị xuất chuẩn của chương trình trước >>và nối nó vào tệp đã cho sau.


28
"Chương trình trước" Điều đó có nghĩa là gì? Lệnh rõ ràng, nhưng chuyển hướng cũng có thể được viết trước, tức là>> file command
rexkogitans

Một ví dụ. Trên Ubuntu 18.04 tôi có thể gõ "apt search rỉ sét >> x" Phần "rỉ sét tìm kiếm apt" tìm kiếm các gói có sẵn cho cụm từ rỉ sét và sau đó gửi nó ra tiêu chuẩn (thông thường là thiết bị đầu cuối trong trường hợp này). Tuy nhiên, ">> x" nói để chuyển hướng đầu ra đến cuối tệp "x". Nếu tôi chỉ muốn thay thế tệp, tôi sẽ chỉ cần một ">" duy nhất.
NomadMaker

@rexkogitans Thậm chí ở giữa lệnh nếu bạn muốn làm cho mã của mình khó đọc. echo a b >> c dsẽ nối a b dvào một tập tin có tên c.
kasperd

@kasperd Bạn cũng có thể phân tán chuyển hướng stdin ở giữa theo bất kỳ thứ tự nào, ngoài ra.
rexkogitans

48

Câu trả lời ngắn - >>làm gì?

Với >>, bạn nối đầu ra của lệnh vào một tệp.

Lệnh ví dụ của bạn bao gồm một số phần, về cơ bản:

lệnh >> tên tệp

Vì vậy, đầu ra của commandsẽ được nối vào filename.


Điều gì xảy ra trong trường hợp cụ thể của echo?

Trong trường hợp cụ thể của bạn, echo "…"lệnh này đưa ra các đối số đầu vào của nó thành tiêu chuẩn stdout, đó là cái gọi là mô tả đầu ra tiêu chuẩn. Các đối số đầu vào echođược theo sau bởi một dòng mới ( \n), để bạn có được ngắt dòng.

Ở đây, một bộ mô tả đầu ra tiêu chuẩn, không có gì khác hơn một luồng đầu ra được hiển thị trong trình bao của bạn khi bạn thực thi một lệnh. (Nghĩa là khi bạn nhập echo foovà nhấn Enter, foo\nlà đầu ra thực tế của echolệnh, được hiển thị bởi trình bao của bạn như foosau một dòng mới.)

Về cơ bản, bất cứ điều gì ghi vào dòng lệnh của bạn đều sử dụng thiết bị xuất chuẩn. Ngoài ra còn có một mô tả khác gọi là stderr nghiêm trọng thường được sử dụng cho các thông báo lỗi. Nó cũng sẽ được in như thiết bị xuất chuẩn, vì vậy đôi khi chúng có thể được xen kẽ. Và có một mô tả stdin được sử dụng cho đầu vào. Xem bài viết này để biết thêm.

Làm thế nào để bạn chuyển hướng đầu ra trong vỏ?

Bạn luôn có thể chuyển hướng thiết bị xuất chuẩn đến một bộ mô tả tệp, điều mà bạn có thể làm với một trong các toán tử sau:

  • >chuyển hướng đến một mô tả tập tin. Nó tạo tập tin nếu nó không tồn tại, hoặc, nếu nó đã tồn tại, cắt ngắn tập tin trước khi viết. Do đó, tệp sẽ được ghi đè bằng thiết bị xuất chuẩn.

  • >>nối vào một mô tả tập tin. Nó tạo tập tin nếu nó không tồn tại.

Bạn cũng có thể chuyển hướng stderr bằng cách sử dụng 2>hoặc 2>>theo cách tương tự. Hoặc bạn có thể kết hợp thiết bị xuất chuẩn và thiết bị xuất chuẩn thành một tệp: 2>&1thực hiện điều đó. Để biết thêm thông tin về chuyển hướng và một số ví dụ khác, bạn có thể đọc hướng dẫn nhỏ này .

Làm thế nào tôi có thể tìm ra một đoạn mã shell cụ thể có nghĩa là gì?

Nói chung, bạn có thể muốn thử giải thích , nó sẽ cung cấp cho bạn hướng dẫn trực quan và thông tin về một lệnh shell cụ thể.


7

Đối với những người TLDR, những người chỉ muốn xem một ví dụ;

Đầu ra tiêu chuẩn (không phải lỗi) của lệnh trước >> sẽ được thêm vào cuối tệp có tên sau nó.

Vì vậy, nếu tệp "flintstones.txt" chứa;

Fred
Barney

echo Dino >> flintstones.txt sẽ dẫn đến 'Dino' được thêm vào cuối tập tin;

Fred
Barney
Dino

Tôi khuyên bạn nên thêm một ví dụ echo Dino > flintstones.txtđể hiển thị nội dung của nó sẽ đơn giản Dinonếu được thực hiện bằng một mũi tên phải.
JakeGould

-2

Một lần nữa, nếu bạn làm

> somefile.txt

Toàn bộ nội dung của tập tin sẽ bị xóa.


Tại sao bạn sao chép câu trả lời khác?
Toto

@Toto Tôi không nghĩ anh ấy làm thế. Nó có vẻ là quảng cáo, và rất có giá trị.
Volker Siegel

@Toto Rất tiếc! Nhìn gần hơn, thực tế không phải vậy. Sai thậm chí về nhiều mặt. Lạ - anh ấy mới ở đây, nhưng hoạt động ở nơi khác - nên có lẽ không chỉ troll.
Volker Siegel

2
@VolkerSiegel: > filexóa tệp nhưng >> filekhông làm gì cả.
Toto

nhưng điều này không trả lời câu hỏi theo bất kỳ cách nào và nên là một nhận xét
phuclv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.