Lệnh * .sort là gì và tại sao nó không hoạt động trong bash của tôi?


7

Trong Hướng dẫn Bash cho người mới bắt đầu (giây 3.2.1.2. Biến cục bộ ) có một lệnh ví dụ được cho là liệt kê tất cả các biến cục bộ, không có trong biến môi trường, hoặc tôi nghĩ vậy:

diff set.sorted printenv.sorted | grep "<" | awk '{ print $2 }'

Tôi tin rằng tôi hiểu mọi thứ về lệnh này ngoại trừ *.sortedphần. Hơn nữa, lệnh này không hoạt động trên Bash của tôi, đặc biệt vì các yếu tố trên. Đây là phản hồi (đây là phiên bản tiếng Ba Lan của Không có tệp hoặc thư mục như vậy ):

diff: set.sorted: Nie ma takiego pliku ani katalogu
diff: printenv.sorted: Nie ma takiego pliku ani katalogu

Đáng chú ý là tôi sử dụng Ubuntu 14.04 mà không có thay đổi nào đối với cài đặt mặc định của nó.

Vì điều này, tôi không thể phân tích lệnh này trong shell Bash của mình, tôi cũng không thể tìm thấy bất cứ điều gì về điều này trên Google ngoại trừ chính hướng dẫn mà tôi đã thực hiện lệnh này.

Tôi sẽ biết ơn về một lời giải thích toàn diện vì tôi chưa bao giờ gặp phải một biểu hiện như vậy trước đây.


10
Để tham khảo trong tương lai, bạn có thể chạy một lệnh với LANG=C commandđể có đầu ra bằng tiếng Anh để đăng trên các trang web như trang này. Ví dụ : LANG=C diff set.sorted printenv.sorted .
terdon

Câu trả lời:


21

Chúng không phải là biểu thức, chúng là tên tệp cho các tệp được tạo như sau:

 printenv | sort > printenv.sorted
 set | sort > set.sorted

Điều đó không rõ ràng từ các tài liệu để bạn có thể hiểu được sự nhầm lẫn của bạn!

Lưu ý rằng bạn có thể cần giúp đỡ diffgrepbằng cách buộc họ coi đầu vào của họ là văn bản (với -a); các biến môi trường có thể chứa các giá trị sẽ khiến chúng coi đầu vào của chúng là nhị phân, sẽ không tạo ra bất cứ thứ gì hữu ích:

diff -a set.sorted printenv.sorted | grep -a "<" | awk '{ print $2 }'

Tốt hơn hết, sử dụng commđể so sánh hai tệp:

comm -23 set.sorted printenv.sorted

Bạn có thể thay thế các tệp bằng thay thế quy trình:

comm -23 <(set|sort) <(printenv|sort)

để tránh tạo tập tin.


1
Làm thế nào bạn có được điều này? Tôi không thấy các lệnh đó trong hướng dẫn cả!
Dmitry Grigoryev

1
Bằng cách giải thích câu giới thiệu, "Dưới đây là một tệp khác được tạo bằng cách so sánh printenv và đặt đầu ra"; vì lệnh không chạy printenvhoặc set, tôi đoán các tệp được cung cấp difflà đầu ra, phải được sắp xếp để so sánh có ý nghĩa.
Stephen Kitt

5
Đối với người dùng * nix có kinh nghiệm, những gì @StephenKitt suy ra rõ ràng là rõ ràng. Đối với khán giả đã nêu của một hướng dẫn "cho người mới bắt đầu", anh ta cũng có thể là một nhà ngoại cảm nhìn vào một quả cầu pha lê. Tác giả của hướng dẫn nên đánh vần rõ ràng hai lệnh như Stephen đã thực hiện ở đây để người mới bắt đầu có thể kết nối các dấu chấm.
Monty Harder
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.