2012-04-17 28 views
7

Gần đây tôi đã thấy lệnh shell trông giống như sau: "> outfile < cat infile", có vẻ như tương đương với chức năng "cat infile> outfile". Đối với vấn đề đó, các hình thức chung có vẻ là "> outfile < lệnh infile arg1 ... argN" trở thành "lệnh arg1 ... argN infile> outfile".Shell Command Bắt đầu với ">"

Dù sao, tôi đã tự hỏi liệu có ai đó có thể giải thích về cách ">" hàng đầu đạt được hiệu ứng này hay không và nếu có bất kỳ cách sử dụng thực tế nào cho nó.

+0

Tại sao điều này lại được giảm giá? Đó là một câu hỏi hay. – Aatch

Trả lời

6

Các "Bash Reference Manual" nói như sau về các nhà khai thác chuyển hướng:

Các nhà khai thác chuyển hướng sau đây có thể đặt trước hoặc xuất hiện bất cứ nơi nào trong một lệnh đơn giản hoặc có thể làm theo một lệnh.

Vì vậy, các lệnh sau đều tương đương:

ls -al > listing.txt 
> listing.txt ls -al 
ls > listing.txt -al 

Mặc dù tôi đoán rằng người đầu tiên là hình thức phổ biến nhất.

Lưu ý rằng tương trật tự của chuyển hướng rất có ý nghĩa, vì vậy nếu bạn đang chuyển hướng một mô tả tập tin khác, ví dụ, sau đây sẽ là khác nhau:

ls > listing.txt 2>&1 # both stdout and stderr go in to listing.txt 

ls 2>&1 > listing.txt # only stdout goes to listing.txt, because stderr was made 
         # a copy of stdout before the redirection of stdout 
4

">" chỉ đơn giản chuyển hướng đầu ra của lệnh tới tệp được đưa ra làm đối số tiếp theo. Việc sử dụng điển hình là để thêm vào cuối lệnh nhưng nó có thể ở bất cứ nơi nào. Vì vậy:

> outfile <command> tương đương với <command> > outfile. Điều tương tự cũng đúng đối với chuyển hướng đầu vào.

Xin lưu ý rằng trong các ví dụ trên, <command> không phải là một cú pháp kỳ lạ - nó chỉ thay thế lệnh tùy ý.

+0

Bạn có lẽ không nên sử dụng các dấu ngoặc nhọn xung quanh 'lệnh' huyền thoại của bạn - nó làm cho ví dụ hơi khó hiểu. –

+0

@MichaelBurr yeap Tôi nghĩ về điều đó nhưng không thể đưa ra định dạng tốt hơn. –

+1

'> OUTFILE COMMAND','>% outfile%% lệnh% ','> $ outfile $ command' – user123444555621

1

Tương đương không phải là:

cat infile > outfile 

Thay vào đó, nó là

cat <infile> outfile 

(chỉ rằng trong trường hợp của con mèo, cat infile là giống như cat <infile)

Khi bạn nhìn thấy nó mà cách, lệnh ban đầu có vẻ đơn giản hơn.

0

Dấu đầu dòng lớn hơn (>) được sử dụng để chuyển hướng đầu ra. Theo mặc định, nó sẽ chuyển hướng STDOUT. Trong trường hợp này, STDOUT trống và do đó một tệp mới và trống được tạo (hiệu ứng tương tự như touch output).

Bạn cũng có thể sử dụng phong cách này của lệnh để tập tin đã có trống, tức là

$ echo FOO >/tmp/foo 
    $ ls -l /tmp/foo 
    -rw-r--r-- 1 flah wheel 4 Apr 17 01:49 /tmp/foo 
    $ > /tmp/foo 
    $ ls -l /tmp/foo 
    -rw-r--r-- 1 flah wheel 0 Apr 17 01:49 /tmp/foo 
    $ 

Để biết thêm thông xem phần Redirection của trang bash người đàn ông.

1

Một lưu ý.Đó là bởi vì bạn thực sự có thể viết những dòng này

< file command 

nó làm cho việc sử dụng vô dụng của Cát tất cả các không thể tha thứ hơn:

cat file | command 

Đó là, ngay cả khi đối với một số lý do bạn muốn các tập tin được cú pháp đến bên trái của lệnh, bạn vẫn không cần cat!