Mục đích của PATH là gì?
Đó là cách vỏ của bạn tìm thấy các chương trình. Khi bạn gõ ls
, ví dụ, đang chạy một chương trình gọi là ls
mà sống ở /bin
trên hầu hết các hệ thống, bao gồm cả Mac OS X. vỏ của bạn chỉ có thể thấy rằng vì /bin
là trong PATH
.
Shell tìm kiếm các chương trình theo PATH
thứ tự, từ trái sang phải. Nếu có hai ls
chương trình trên hệ thống của bạn và các thư mục của chúng đều nằm trong bạn PATH
, nó sẽ tìm thấy chương trình trong thư mục được liệt kê đầu tiên trong của bạn PATH
.
Sự khác biệt giữa / etc / path và ~ / .bash_profile
Các đường dẫn được đặt trong /etc/paths
được thêm vào PATH
lúc khởi động trong tất cả các trình bao trên Mac OS X.
~/.bash_profile
chỉ là một trong một số tập lệnh shell do Bash điều hành khi khởi động, và một vài trong số này là dành riêng cho Bash. Do đó, nếu bạn thay đổi vỏ của mình - Mac OS X cũng gửi tcsh
và zsh
, ví dụ - những thay đổi được thực hiện để /etc/bashrc
không áp dụng cho vỏ mới của bạn.
Ngoài ra, /etc/paths
là một tệp cấu hình cấp hệ thống, trong khi ~/.bash_profile
là cho mỗi người dùng. Nếu bạn có nhiều người dùng tương tác được thiết lập trên máy Mac của mình, bạn sẽ không muốn thêm các thư mục /etc/paths
mà bạn không muốn xuất hiện trong mọi người PATH
. Điều tương tự cũng đúng /etc/bashrc
, ngoại trừ điều đó tất nhiên chỉ áp dụng cho người dùng sử dụng Bash làm vỏ của họ.
Sự khác biệt giữa PATH và $ PATH và $ {PATH} là gì?
Bạn thường chỉ nhìn thấy biến mà không có sigil khi bạn đang đặt biến. FOO=bar
đặt FOO
biến môi trường cho chuỗi bar
. Nếu bạn gõ set
, shell sẽ hiển thị cho bạn tất cả các biến môi trường và trong trường hợp đó bạn cũng thấy biến đó không có bất kỳ sigil nào.
$PATH
và ${PATH}
thường được hoán đổi cho nhau. Họ nói với shell để mở rộng PATH
giá trị của biến hiện tại tại chỗ. Sự khác biệt có liên quan đến cách thức và nơi bạn sử dụng chúng. Ví dụ:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
Trong echo
lệnh thứ hai , shell in không có gì vì nó yêu cầu shell in một biến được gọi là biến FOOx
không tồn tại; shell xử lý các biến không tồn tại là rỗng. Bởi vì phần ba echo
sử dụng cú pháp dấu ngoặc nhọn, nó cho phép trình bao thấy rằng bạn đang yêu cầu FOO
biến đó và đó x
chỉ là một ký tự khác mà bạn muốn in ngay sau đó.
Nhân tiện, có một cách khác để có được hiệu ứng tương tự mà không cần niềng răng xoăn:
$ echo "$FOO"x
barx
Các biến môi trường được mở rộng trong dấu ngoặc kép và dấu ngoặc kép tách biệt x
với phần mở rộng biến để shell thực hiện đúng.
Tôi đang sử dụng FOO
biến môi trường ở đây chỉ để rõ ràng. Tất cả mọi thứ tôi đã viết ở trên cũng áp dụng PATH
, vì nó chỉ là một biến môi trường khác. Các văn bản ví dụ sẽ chỉ dài hơn rất nhiều.
Xuất khẩu PATH có nghĩa là gì? Khi nào chúng ta xuất khẩu?
Lấy FOO
ví dụ trên , nếu bạn chạy một chương trình khác, nó sẽ không thấy FOO
biến vì nó không được xuất. Nó chỉ sống trong một thể hiện shell đó:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
Khi tôi lần đầu tiên chạy bash
shell mới bên dưới lớp vỏ mà tôi đã sử dụng, sau đó thử hiển thị giá trị của FOO
, tôi nhận được một khoảng trống vì FOO
không được xuất cho các chương trình con để xem. Sau đó, tôi đã thoát phiên bản thứ hai bash
, xuất nó, chạy bash
lại và bây giờ phiên bản thứ hai thấy giá trị của FOO
.
Bạn sử dụng export
khi bạn muốn các chương trình con thấy các giá trị được đặt trong trình bao và không sử dụng nó khi bạn không muốn điều đó xảy ra.
Thông thường, tôi không xuất các biến tạm thời trong các tập lệnh shell, vì tôi không muốn chúng thay đổi cách các chương trình chạy từ tập lệnh shell đó hoạt động.
Tôi sẽ không trả lời bất kỳ câu hỏi nào khác của bạn. Bạn chỉ nên hỏi một câu hỏi tại một thời điểm. Tôi chỉ trả lời câu hỏi này vì chúng liên quan một cách mơ hồ. Mọi thứ khác thuộc về một câu hỏi riêng biệt.