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ì?
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ì?
Câu trả lời:
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.
>> file command
echo a b >> c d
sẽ nối a b d
vào một tập tin có tên c
.
>>
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 command
sẽ được nối vào filename
.
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 foo
và nhấn Enter, foo\n
là đầu ra thực tế của echo
lệnh, được hiển thị bởi trình bao của bạn như foo
sau 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.
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>&1
thự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 .
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ể.
Đố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
echo Dino > flintstones.txt
để hiển thị nội dung của nó sẽ đơn giản Dino
nếu được thực hiện bằng một mũi tên phải.
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.
> file
xóa tệp nhưng >> file
không làm gì cả.
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.