Biến Unix PATH là gì và làm cách nào để thêm vào nó?


11

Nhiều hướng dẫn lập trình yêu cầu người dùng thêm một cái gì đó vào PATHnhưng không giải thích nó là gì. Các tài nguyên hiện có giải thích PATHcho người dùng mới sử dụng dòng lệnh không tốt lắm.

  • PATHBiến Unix là gì?

  • Tôi vừa tải xuống một chương trình, sau đó thử chạy một lệnh trong terminal và nhận command not found. Điều này có liên quan gì đến PATH?

  • Tôi đã thêm một cái gì đó vào PATHlệnh này và sau đó mọi thứ hoạt động:

    export PATH=/path/to/some/bin:$PATH
    

    ... nhưng sau đó tôi command not foundlại nhận được lần sau khi tôi khởi động máy tính của mình. Làm thế nào tôi có thể làm cho nó ở lại PATHmỗi khi tôi mở Terminal?

  • Cách tốt nhất để xác định xem một chương trình như Git hoặc gccđã được tải trên máy tính của tôi chưa?


3
Tôi đã đọc qua nhiều câu trả lời trên SO và tôi chưa tìm thấy câu trả lời nào trả lời từng câu hỏi theo cách mà một người mới có thể hiểu. Tôi muốn một cái gì đó tôi có thể liên kết người dùng dòng lệnh mới với. Tôi hy vọng có thể thêm nó dưới dạng wiki cộng đồng và đính kèm tiền thưởng đáng kể vào nó.
Kevin Burke

4
Tôi cá là tôi có thể tìm thấy 50 lượt truy cập nếu tôi tìm kiếm google cho câu hỏi này. Tại sao bạn không thể?
trojanfoe

2
Và nếu không có liên kết nào trỏ đến SO cho một câu hỏi đủ điều kiện ở đây, thì nó nên được thêm vào đây. Chúng tôi muốn SO là nơi Google đi đến cho các câu hỏi lập trình.

Vui lòng xem bài đăng MSO này để biết động lực của Kevin khi đặt câu hỏi này. Anh ta rất có thể sẽ thực hiện một chỉnh sửa để làm rõ thông tin này hữu ích như thế nào.
jmort253

1
@ jmort253: Chà, anh ấy nên bắt đầu thực hiện nhanh chóng. 4/5 phiếu gần. Tôi sẽ không đóng vì tôi biết muốn chỉnh sửa câu hỏi, nhưng tốt hơn hết là anh nên làm cho nhanh.
Madara's Ghost

Câu trả lời:


17

Đường dẫn UNIX là một biến môi trường là danh sách các thư mục để tìm các chương trình mà bạn đang cố chạy. Nó cho phép bạn tránh phải sử dụng tên đường dẫn đầy đủ để chạy những thứ như /bin/ls(ví dụ bằng cách đặt /binđường dẫn).

Ví dụ: một đường dẫn có thể bao gồm:

/bin:/usr/bin:/usr/sbin

và điều đó có nghĩa là, khi bạn gõ lệnh xyzzy, nó sẽ cố chạy tệp đầu tiên mà nó tìm thấy từ danh sách hiện tại:

/bin/xyzzy
/usr/bin/xyzzy
/usr/sbin/xyzzy

(nó có thể bỏ qua các tệp không thể thực thi nếu nó thông minh).

Bạn có thể thêm mọi thứ vào đường dẫn bằng một lệnh như:

set PATH=/directory/to/add:$PATH:/low/priority/path

nơi đặt /directory/to/addở đầu danh sách tìm kiếm đường dẫn và /low/priority/pathở cuối.

Tuy nhiên, điều này thường chỉ thay đổi cho vỏ hiện tại . Nếu bạn muốn thực hiện thay đổi trong mọi shell, bạn nên thêm dòng đó vào một trong các tệp khởi động của mình, như $HOME/.profilehoặc /etc/profile. Tệp chính xác để sử dụng tùy thuộc vào chính trình bao của bạn và cách bạn thiết lập các tệp khởi động. Không phải lúc nào cũng dễ dàng để biết nơi cần đi nhưng các quy tắc thường được giải thích trong trang chủ cho bất kỳ vỏ nào bạn đang sử dụng.

Bạn thường có thể tìm thấy một lệnh trong đường dẫn với một trong những:

which cmd
whence cmd

để xác định vị trí cmdthực thi. Ví dụ: trên hệ thống Debian của tôi, tôi nhận được bảng điểm sau:

pax> which ls
/bin/ls

pax> which firefox
/usr/bin/firefox

pax> which xyzzy

pax> 

1
Câu hỏi này có thuộc về stackoverflow không?
trojanfoe

@trojanfoe, nhiều như bất kỳ câu hỏi liên quan đến vỏ nào, vâng, tôi sẽ nghĩ như vậy. Đó cũng là một ngôn ngữ lập trình.

Tôi đã sửa đổi câu trả lời để sử dụng :làm dấu phân cách, như được sử dụng trên * nix. Windows sử dụng ;(có lẽ vì :đã có ý nghĩa C:).
Joachim Sauer

Trên thực tế, @Joachim, có thể đúng hơn khi nói rằng một shell đã cho (chứ không phải UNIX) có một dấu tách thư mục cụ thể nhưng bạn phù hợp với tất cả những cái tôi sử dụng ngoài đỉnh đầu. Cảm ơn đã sửa chữa, chúc mừng.

@paxdiablo: vâng, tôi đã nghĩ về điều đó nhưng tôi cũng không thể nghĩ ra bất kỳ shell unix nào không sử dụng :(ví dụ như trong Java, path.separatorluôn luôn :bật * nix).
Joachim Sauer

5

Những gì là?

Biến môi trường PATH là danh sách các thư mục được phân tách bằng dấu hai chấm mà shell của bạn tìm kiếm khi bạn nhập lệnh.

Làm thế nào để thiết lập nó?

PATH=$PATH:/your/directory
export PATH

Làm thế nào tôi có thể làm cho nó ở lại trên PATH mỗi khi tôi mở Terminal?

Đặt hai dòng trước đó bên trong ~/.bash_profile(nếu bạn đang sử dụng bashcho Terminal).


3

PATH là một biến môi trường cho unix như các hệ thống.

thiết lập đường dẫn:

export PATH=$PATH:<your path>

đường dẫn không đặt:

unset $PATH

đặt đường dẫn vĩnh viễn

trong thư mục nhà của bạn, bật Xem -> Hiển thị tệp ẩn .... bút .bash_profile, trước khi xuất dòng PATH, thêm dòng này .....

PATH=$PATH:<yourpath>

đăng xuất và đăng nhập lại ...... kiểm tra xem nó có hoạt động không ... tốt! nó nên hoạt động .....


1
Xin lỗi cho downvote, nhưng điều này được định dạng kém và phrased. Cố gắng tránh sử dụng quá nhiều chữ in đậm, sử dụng quá nhiều dấu chấm lửng ("...") và viết câu đầy đủ. Điều đó sẽ giúp tránh các downvote như vậy trong tương lai.
Joachim Sauer

1
@Joachim Sauer tại sao bạn không chỉnh sửa câu trả lời? Tại sao bạn thích downvote nó?

1
@MikroDel: bởi vì đã có câu trả lời tốt hơn, chất lượng cao hơn cho câu hỏi này và việc bỏ qua mất ít nỗ lực hơn. Nếu đây là câu trả lời duy nhất, có lẽ tôi đã chỉnh sửa nó. Ngoài ra: mặc dù chúng thường không có niềm vui, downvotes là một công cụ hợp pháp (có, có lên xuống mũi tên bên cạnh mỗi câu hỏi / câu trả lời).
Joachim Sauer

1
chỉnh sửa hoặc đăng nhận xét này mất gần cùng một lúc, nhưng chỉnh sửa sẽ giúp nó tốt hơn và giúp Chaianu Banerjee và những người dùng khác

@MikroDel: vậy giải thích lý do đằng sau một downvote không giúp ích gì cho người dùng? Tôi nghĩ rằng tôi đã khá rõ ràng về lý luận của mình và đã đưa ra những lời khuyên thiết thực để cải thiện chất lượng. Điều duy nhất mà sự khăng khăng của bạn làm nó làm giảm sự sẵn lòng của tôi để giải thích các downvote của tôi (và như bạn có thể thấy trong hồ sơ của tôi, tôi không downvote quá mức).
Joachim Sauer
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.