Sự khác biệt giữa lệnh của >> >> và >> >> trong lệnh shell là gì?


Câu trả lời:


48

>được sử dụng để ghi đè ( tập tin clobber ) một tập tin và >>được sử dụng để nối vào tập tin.

Do đó, khi bạn sử dụng ps aux > file, đầu ra của ps auxsẽ được ghi vào filevà nếu một tệp có tên fileđã có sẵn, nội dung của nó sẽ bị ghi đè.

Và nếu bạn sử dụng ps aux >> file, đầu ra của ps auxsẽ được ghi vào filevà nếu tệp có tên fileđã có sẵn, thì tệp sẽ chứa nội dung trước đó và cả nội dung của ps aux, được viết sau nội dung cũ hơn của nó file.


11

nếu bạn viết trong thiết bị đầu cuối

ps aux > log

Nó sẽ đặt đầu ra của ps auxđể đăng nhập tập tin có tên.

sau đó nếu bạn đặt

ps aux >> log

sau đó đầu ra tiếp theo sẽ được nối bên dưới đầu tiên. nếu bạn chỉ đặt một cái, >nó sẽ ghi đè lên tập tin trước đó.


4

Có, >>nối thêm, >luôn ghi đè / hủy nội dung trước đó.

ps -aux > log

giống như

rm log 2>/dev/null
ps -aux >> log

Trên Wintel nó là như nhau cho .bat, .cmd.ps1kịch bản quá; di sản chung, lẽ thường.


3

Sự khác biệt quan trọng nhất là >làm cho shell mở một tệp hoặc đối tượng giống như tệp có O_WRONLY|O_CREAT|O_TRUNCcờ - tệp sẽ được tạo hoặc cắt bớt nếu nó tồn tại, trong khi >>mở tệp có O_WRONLY|O_CREAT|O_APPENDcờ - tệp sẽ được tạo hoặc gắn vào nếu nó tồn tại. Điều này là hiển nhiên nếu bạn theo dõi các cuộc gọi hệ thống, ví dụ như với

$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1

Và với

$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1
+++ exited with 0 +++

Lưu ý rằng trong cả hai trường hợp, bộ mô tả tệp của tệp đang mở được sao chép vào bộ mô tả tệp 1 (stdout) của lệnh và điều đó sẽ được kế thừa bởi bất kỳ lệnh nào mà shell forks.

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.