Làm thế nào để bạn nhớ cú pháp cho 2> & 1 chuyển hướng [đã đóng]


12

Bạn có một hệ thống hay ghi nhớ? Điều này đã làm phiền tôi trong nhiều năm tôi luôn phải tìm kiếm nó

Câu trả lời:


19

Nếu bạn là lập trình viên C, bạn có thể nghĩ &1là "địa chỉ của 1", vì vậy hãy 2>&1đọc "mô tả tệp chuyển hướng # 2 đến cùng một vị trí với # 1".


Không biết có giúp được không ... Mnemonics là một thứ khá cá nhân.
lgeorget

+12 Đó cũng là một mô tả chính xác về những gì đang xảy ra.
Stéphane Chazelas

1
Tôi tự hỏi liệu nó đã được nghĩ như thế nào ("địa chỉ của 1") khi nó được phát minh. Vì một số người đã đóng góp rất nhiều cho cả ngôn ngữ C và UNIX khi chúng được phát minh, điều đó là có thể
lgeorget

1
Tôi có thể bắt đầu sử dụng cái này thay thế;)
goldilocks

3

"Hai đến một" ("thành" >) có ý nghĩa logic với tôi hơn "Hai và một", đó là điều tôi thường có thể nhầm lẫn với nó. Nếu bạn coi "và một" là một danh từ riêng (một địa điểm), thì nó cũng có ý nghĩa ngữ pháp trong ngữ cảnh, khó thực hiện hơn với "Hai và một" - bạn phải xem xét "với một" một danh từ, và nó vẫn không có ý nghĩa ngữ cảnh.


2
Tôi không hiểu
Matt

2

Không phải là ghi nhớ, nhưng tôi đọc nó như sau:

0là stdin. 1là xuất sắc. 2là thiết bị lỗi thời. >là thành. <Ra khỏi. &là mô tả tập tin (trong một số shell).

2>&1
2      >    &               1
stderr into file descriptor 1

redirect stderr into stdout

Nó có thể thay đổi nếu bạn gặp rắc rối với bất kỳ mô tả tệp nào trước khi chuyển hướng ...

2>somefile 1>&2
2      >    somefile     1      >    &2
stderr into somefile and stdout into file descriptor 2

redirect stderr into somefile and stdout into somefile. 

2

Khi bạn viết 2>&1, bạn đang nói "lỗi tiêu chuẩn chuyển sang đầu ra tiêu chuẩn".

Hãy phá vỡ nó.

Trước tiên, bạn muốn ghi nhớ rằng lỗi tiêu chuẩn là 2và đầu ra tiêu chuẩn là 1.

Vì vậy, bạn đã có 2một cái gì đó 1.

"đi đến" được viết >.

Vì vậy, bạn đã có 2>một cái gì đó 1.

2>filenamecó nghĩa là gửi lỗi tiêu chuẩn đến filename. Nhưng bạn không muốn gửi nó đến một tập tin gọi là 1. Bạn muốn một cái gì đó khác: số lượng tệp đã được mở. Đó là những gì &dành cho.

Vì vậy 2>&1.

Bạn cũng có thể nghĩ về nó giống như bạn đang thực hiện một bài tập, trong đó cái >giống như một số bằng và &giống như một $, so sánh:

f=$1
2>&1

Để hiểu một dòng lệnh có nhiều chuyển hướng, điều quan trọng cần biết là các chuyển hướng được thực hiện từ trái sang phải. Xem thứ tự chuyển hướng để biết thêm chi tiết về điều đó.


0

Tôi nhớ rằng nó luôn luôn là 2 -> 1. Stderr to stdout.

Phần giữa luôn là phần khó và tôi luôn làm nó rối tung lên, cho đến khi tôi nhớ rằng đầu tiên là nhân vật sắc sảo >, sau đó là nhân vật tôi không thể viết trong đời thực &.

Vì vậy, không bao giờ 2&>1, luôn luôn2>&1


0

Nếu bạn hiểu rằng FD2 là STDERR, bạn có thể nghĩ, "Ồ, và bắt STDERR ở bất cứ nơi nào tôi gửi STDOUT (FD1)".


0

Đồng nghiệp của tôi và tôi thường nói "hai lớn hơn một", bởi vì hầu hết chúng ta không luôn luôn nhớ rằng stderrlà mô tả tập tin 2stdout1(đặc biệt là những người mới đến unix / linux), do đó việc nhớ mật khẩu khác về chuyển hướng stderrkhông thực sự làm việc . Vấn đề duy nhất là, bạn vẫn phải nhớ ampersand đi đâu!

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.