Điểm:2

Tại sao "less" chấp nhận tên tệp trống và hiển thị một số biến môi trường?

lá cờ cn

tôi chạy một ít hơn lệnh mà tôi dự kiến ​​sẽ thất bại vì tên tệp sẽ trống, nhưng thật ngạc nhiên, nó đã in một số biến môi trường:

$ less -XE "$( Tập lệnh không tồn tại)"
xuất LESSOPEN="| /usr/bin/lesspipe %s";
xuất LESSCLOSE="/usr/bin/lesspipe %s %s";

(-XE về cơ bản làm cho nó hoạt động như con mèo.)

con mèo, mặt khác, thất bại:

$ cat "$(kịch bản không tồn tại)"
cat: '': Không có tệp hoặc thư mục như vậy

Tại sao ít hơn làm cái này? Tôi chỉ có thể tưởng tượng rằng nó có vấn đề, bởi vì nếu có một số lỗi trong mã của bạn gây ra tên tệp trống, thì bạn sẽ nhận được kết quả không có thật.

Trong khi chúng tôi ở đây, tại sao nó lại in các biến môi trường đó? Có phải họ từ môi trường của tôi? Chúng giống hệt nhau:

$ khai báo -p LESOPEN LESSCLOSE 
khai báo -x LESSOPEN="| /usr/bin/lesspipe %s"
khai báo -x LESSCLOSE="/usr/bin/lesspipe %s %s"

Tôi đã kiểm tra người đàn ông ít hơn nhưng tên tập tin tham số dường như không được ghi lại rõ ràng. Những đề cập khác về nó dường như không liên quan đến hành vi này. Tôi cũng đã kiểm tra các ít hơn Câu hỏi thường gặp.

lá cờ hr
Có vẻ như việc thực thi `lesspipe` với tên tệp trống là một cách sử dụng đặc biệt, dự định được thực hiện từ tập lệnh thiết lập trình bao để thiết lập môi trường cho các lệnh gọi `less` tiếp theo. Xem ví dụ [Bạn có thể giải thích biểu thức eval trong .bashrc mặc định](https://askubuntu.com/questions/724351/can-you-explain-eval-expression-in-the-default-bashrc). Tôi không biết tài liệu này ở đâu.
wjandrea avatar
lá cờ cn
@steeldriver Hừ, bạn nói đúng! Tôi vừa thử `less --no-lessopen ''` và không thành công với `: No such file or directory`. Vì vậy, nếu tôi hiểu chính xác, đây có phải là một vấn đề nhỏ trong thiết lập Ubuntu không? (và có thể cả thiết lập Debian ngược dòng nữa?)
user10489 avatar
lá cờ in
Chà, ít nhất nó cũng là một trò đùa của lesspipe, và trang man của lesspipe nói rằng nó được viết cho Debian.
wjandrea avatar
lá cờ cn
@steeldriver Có vẻ như vấn đề cốt lõi là `less` không trích dẫn chính xác chuỗi mà nó chuyển đến `LESSOPEN`, thay vào đó tất cả những gì nó làm là ["Chèn dấu gạch chéo ngược trước mỗi siêu ký tự"](https://github.com /gwsw/less/blob/1d0e8245cd32b149101039adfc0a379daf778de1/filename.c#L138-L143). Tôi thà rằng nó không cố gắng trích dẫn nó chút nào, sau đó chúng tôi sẽ trích dẫn tên tệp trong cấu hình: `LESSOPEN='| /usr/bin/lesspipe "%s"'`.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.