Bash, luôn luôn kiểm tra $ PWD như một phần của con đường?


15

Bối cảnh: Một trong những đồng nghiệp của tôi không đến từ nền tảng Linux đã hỏi tôi về việc sử dụng ./trước một số lệnh chứ không phải các lệnh khác, vì vậy tôi đã giải thích cho anh ta cách PATHhoạt động và cách chọn nhị phân được chạy. Phản ứng của anh ta là nó thật ngu ngốc và anh ta chỉ muốn không cần gõ ./trước các lệnh.

Câu hỏi: Có cách nào để dễ dàng sửa đổi hành vi của shell sao cho $PWDluôn là mục đầu tiên PATHkhông?


Câm nó có thể (hoặc có thể không), nhưng mọi môi trường đều có những điều kỳ quặc, và đây là một cách giải quyết vỏ Unix điển hình.
RonJohn

12
Đó là một biện pháp an ninh. Shell được sử dụng để làm điều này theo mặc định (nghĩ là những năm 1970) và các hệ thống nhiều người dùng đã bị tấn công rộng rãi trên tài khoản của nó.
Charles Duffy

3
Phản ứng của ông là nó thật ngu ngốc : đồng nghiệp nói rằng cần phải tự giáo dục chính mình về chủ đề này. Câu trả lời ngoài lề đó thể hiện phản hồi theo kiểu PHB : không hiểu hoặc đánh giá cao hệ thống cơ bản.
Đám mây

2
Tại sao không bỏ các nhị phân vào ~/binvà biến nó thành một phần của PATH? Điều này giữ cho mọi thứ có tổ chức, quá.
Sergiy Kolodyazhnyy

3
@Ziazis trên Windows, thư mục hiện tại được xem xét bất kể đó là một phần của PATH(đó là nguồn thông thường của những cân nhắc như vậy).
Stephen Kitt

Câu trả lời:


55

Nếu bạn thực sự muốn, bạn có thể làm điều này bằng cách thêm vào .đường dẫn của bạn:

export PATH=".:$PATH"

Tuy nhiên, đó là một ý tưởng tồi, bởi vì nó có nghĩa là trình bao của bạn sẽ chọn bất kỳ lệnh nào trong thư mục hiện tại để ưu tiên cho người khác. Nếu ai đó (hoặc một số chương trình) bỏ một lslệnh độc hại trong thư mục bạn sử dụng thường xuyên, bạn sẽ gặp rắc rối ...


13
Đây là một điểm tuyệt vời, mặc dù có lẽ nó sẽ đủ để di chuyển. đến cuối con đường, sau đó xuất PATH = "$ PATH :."
Christophe

12
Quả thực tôi nhớ rằng .lúc đầu bạn PATHlà mặc định cho người dùng bình thường (nếu tôi tạo người dùng bằng "sam" trên HP-UX, ít nhất là tôi không chắc chắn về SunOS cũ). Sau đó, mặc định này đã được gỡ bỏ vì lý do bảo mật. Nếu bạn có .mục cuối cùng của bạn PATH, vẫn có người có thể hy vọng vào những lỗi chính tả điển hình.
Phi

6
@Philippos, vâng, giống như các /tmp/slkịch bản chơi khăm khét tiếng để nhắm mục tiêu người dùng với các PATH như vậy. Trên Debian và các công cụ phái sinh, hãy cài đặt slgói để có ý tưởng về tần suất bạn nhập slthay thế ls.
Stéphane Chazelas

Không, đó không phải là một ý tưởng tồi, nó là một ý tưởng tốt, đặc biệt nếu bạn là một nhà phát triển. Tất nhiên, giữ một môi trường mà không ai rơi vào các lệnh độc hại là một ý tưởng tốt khác.
jamesqf

4
@jamesqf, thực sự, đó là một ý tưởng tốt để loại ra ./khi bạn muốn gọi các lệnh trong thư mục hiện tại. Hoặc, nếu thư mục hiện tại thông thường của bạn là /project/under/development/bin, sau đó thêm vào của bạn PATH. Điều này giải quyết trường hợp sử dụng nhà phát triển của bạn. Đặt .vào lúc bắt đầu của bạn PATHlà một ý tưởng tồi, thời kỳ.
tự đại diện

14

Mặc dù đây không phải là câu trả lời trực tiếp cho câu hỏi của bạn, nhưng cách tốt nhất là tạo một binthư mục trong thư mục chính của bạn dưới dạng/home/user/bin :

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

Có kịch bản cá nhân của bạn đặt ở đó. Điều PATHnày sẽ được duyệt theo thứ tự bạn xác định nó và thực thi các tập lệnh cá nhân của bạn mà không .cần thiết.


0

Bạn cần phải có. vào đầu biến PATH của bạn:

export PATH=".:$PATH"
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.