Quick one, 2>&1
chuyển hướng stderr thành stdout, nhưng ký hiệu và nghĩa là gì? Tôi biết nếu chúng tôi có 2 > 1
, nó sẽ xuất ra một tệp có tên là 1
, thì ký hiệu và ký hiệu là gì?Dấu và ký hiệu chỉ ra trong lệnh bash này 1> & 2
Trả lời
Nó sao chép tập tin mô tả từ 1 tới tập tin mô tả 2. FD2 là stderr và stdout fd1 là, vì vậy nó làm cho bất kỳ đầu ra để stderr đi stdout để thay thế.
Cảm ơn, vì vậy & có nghĩa là đầu ra để tập tin desciptor thay vì tập tin – mikip
Nó thao tác của các mô tả tập tin. –
2>&1
chuyển hướng lỗi chuẩn (tệp xử lý 2) sang cùng một tệp mà đầu ra tiêu chuẩn (xử lý tệp 1) là hiện tại là.
Nó cũng là một điều vị trí phụ thuộc vào vậy:
prog >x 2>&1 >y
sẽ thực sự gửi sai số chuẩn để x
và đầu ra tiêu chuẩn để y
như sau:
- Connect chuẩn đầu ra để
x
; - Sau đó, kết nối lỗi tiêu chuẩn giống với đầu ra tiêu chuẩn hiện tại, là
x
; - Sau đó, kết nối đầu ra tiêu chuẩn với
y
;
Tôi sẽ upvote điều này nhiều lần nếu tôi có thể. Tôi đã khó hiểu điều này, và lời giải thích của bạn về tầm quan trọng của * thứ tự * rõ ràng hơn tài liệu bash hiện tại: http://www.gnu.org/software/bash/manual/bashref.html#Redirections. Cảm ơn! – FMc
Điều này tổng hợp mọi thứ! Trong 8 năm sử dụng Linux, không ai giải thích điều này một cách rõ ràng! Cảm ơn bạn đời. –
Từ info bash
:
3.6.7 Duplicating File Descriptors
----------------------------------
The redirection operator
[N]<&WORD
is used to duplicate input file descriptors. If WORD expands to one
or more digits, the file descriptor denoted by N is made to be a copy
of that file descriptor. If the digits in WORD do not specify a file
descriptor open for input, a redirection error occurs. If WORD
evaluates to `-', file descriptor N is closed. If N is not specified,
the standard input (file descriptor 0) is used.
The operator
[N]>&WORD
is used similarly to duplicate output file descriptors. If N is not
specified, the standard output (file descriptor 1) is used. If the
digits in WORD do not specify a file descriptor open for output, a
redirection error occurs. As a special case, if N is omitted, and WORD
does not expand to one or more digits, the standard output and standard
error are redirected as described previously.
Vì vậy 2>&1
bản sao fd 1 vào fd 2.
Ký hiệu và thuộc về "1", do đó đoạn mã thực sự có ba phần: "2", ">", "& 1". Họ có nghĩa là, tương ứng, "lấy dữ liệu từ luồng đầu ra 2 (là lỗi chuẩn)", "chuyển hướng nó", và mục tiêu chuyển hướng, là luồng đầu ra 1. Vì vậy, "&" ở đây cho phép bạn chuyển hướng đến luồng hiện tại , thay vì tập tin.
dấu và không làm bất cứ điều gì - đó là ký tự trong toán tử 2>&1
chứ không phải là một điều theo đúng nghĩa của nó.
bash hỗ trợ một số redirection operators, toán tử 2>&1
hoặc toán tử &>
kết hợp các luồng của quy trình trước hoặc sau khi chuyển hướng.
&
trong &1
sao y bộ mô tả tệp 1
. Trình mô tả trùng lặp thực sự không hoạt động như một bản sao, nhưng giống như một bí danh của bản sao cũ. Nhân bản 1
cho phép nhiều luồng được chuyển hướng đến 1
mà không ghi đè lên nhau.
Ví dụ: (không &
)
$ ls existing-file non-existent-file > tmp 2> tmp
$ cat tmp
existing-file
nt-file: No such file or directory
Lưu ý rằng 1
ghi đè lên những gì 2
viết.Nhưng không phải khi chúng ta sử dụng &
:
$ ls existing-file non-existent-file > tmp 2>&1
$ cat tmp
ls: non-existent-file: No such file or directory
existing-file
Một bộ mô tả tập tin là một tay cầm vào một tập tin (hoặc nguồn lực đầu vào/đầu ra khác, chẳng hạn như một ống hoặc mạng socket). Khi 1
và 2
được chuyển hướng riêng đến tmp
(như trong ví dụ đầu tiên), chúng di chuyển con trỏ tệp tmp
độc lập. Đó là lý do tại sao các bộ mô tả tập tin ghi đè lên nhau.
Theo Linux man page:
[file descriptor Duplicate] tham khảo với cùng mô tả tập tin mở và do đó file chia sẻ bù đắp và tình trạng tập tin cờ; ví dụ, nếu bù đắp tập tin được sửa đổi bằng cách sử dụng lseek (2) trên một trong các bộ mô tả, chênh lệch cũng được thay đổi cho phần còn lại.
Lưu ý rằng mặc dù &
hành vi như một bí danh, 2>&1
phương tiện chuyển hướng 2
vào dòng đó 1
trong hiện trỏ đến. Khi 1
được chuyển hướng đến một mục khác, 2
trỏ đến cùng một tệp mà nó đã độc lập với 1
.
Quan sát: [? Trong vỏ, những gì hiện "2> & 1" có nghĩa là]
$ ls existing-file non-existent-file > tmp 2>&1 > tmp1
$ cat tmp1
existing-file
$ cat tmp
ls: non-existent-file: No such file or directory
- 1. chuyển đổi ký hiệu khoa học ký hiệu bash
- 2. "+" và "-" đầu ra của lệnh Jobs
- 3. Cách lấy đầu ra của lệnh bash trong biến
- 4. Bash thoát dấu ngã và ký tự đại diện nhưng không phải dấu cách
- 5. Bash: mẫu grep từ đầu ra lệnh
- 6. Ký hiệu dấu ngoặc nhọn trong PHP
- 7. Ký số nguyên và dấu không dấu
- 8. Ký hiệu dấu chấm lửng trong C#?
- 9. Đầu ra lệnh của kịch bản lệnh Bash vào biến
- 10. Tập lệnh Bash để chuyển đổi cột ngày và giờ thành dấu thời gian trong .csv
- 11. Bash: thao tác bằng các chuỗi (ký hiệu phần trăm)
- 12. bash cho lệnh nội tuyến
- 13. Tập lệnh Bash: chỉ định định dạng số đầu ra bc
- 14. Xoay tập tin nhật ký tập lệnh Bash
- 15. Dấu "/" ký hiệu/ký tự/ký tự có ý nghĩa gì trong Git?
- 16. Cú pháp $ {0 ## ...} có ý nghĩa gì với biến, dấu ngoặc và ký tự băm trong bash?
- 17. Cú pháp Objective-C này là gì, ký hiệu chấm chấm kiểu dấu chấm? "..."
- 18. Dấu hiệu maven không chỉ được tạo ra, mà còn phụ thuộc
- 19. Tập lệnh Bash, kiểm tra lỗi, ghi nhật ký
- 20. Tập lệnh Bash để lưu trữ các tệp nhật ký
- 21. Xử lý đối số dòng lệnh Perl với dấu cách từ tập lệnh bash?
- 22. Chỉ định thuộc tính đối tượng trong ký hiệu dấu chấm có biến số
- 23. Bash - Thoát lệnh SSH
- 24. Bash Scripting - vỏ lệnh đầu ra chuyển hướng
- 25. PHP dấu ngoặc nhọn trong ký hiệu mảng
- 26. Ký hiệu '()' này có nghĩa là gì?
- 27. PowerShell tương đương với lệnh Bash này là gì?
- 28. "sed" lệnh trong bash
- 29. Nhận Đầu ra Dấu nhắc Lệnh tới Chuỗi Trong Java
- 30. Lọc ký tự không phải chữ cái ra khỏi chuỗi trong tập lệnh shell
có thể trùng lặp của (http://stackoverflow.com/questions/818255/in-the-shell-what -oes-21-mean) –