Tôi sử dụng một tập hợp các hàm tiện lợi để thêm trước hoặc nối thêm một đường dẫn đến một biến. Các hàm xuất hiện trong tarball phân phối cho Bash trong một tệp đóng góp có tên là "pathfuncs".
- add_path sẽ thêm mục vào cuối biến PATH
- pre_path sẽ thêm mục vào đầu biến PATH
- del_path sẽ xóa mục nhập khỏi biến PATH, bất kể nó ở đâu
Nếu bạn chỉ định một biến làm đối số thứ hai, nó sẽ sử dụng biến đó thay vì PATH.
Để thuận tiện, đây là:
# is $1 missing from $2 (or PATH) ?
no_path() {
eval "case :\$${2-PATH}: in *:$1:*) return 1;; *) return 0;; esac"
}
# if $1 exists and is not in path, append it
add_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
}
# if $1 exists and is not in path, prepend it
pre_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
}
# if $1 is in path, remove it
del_path () {
no_path $* || eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`
}
Nếu bạn thêm chúng vào tệp khởi động bash của mình, bạn có thể thêm vào PATH của mình như thế này:
pre_path $HOME/bin
add_path /sbin
add_path /usr/sbin
Hoặc chỉ định một biến khác:
pre_path $HOME/man MANPATH
pre_path $HOME/share/man MANPATH
add_path /usr/local/man MANPATH
add_path /usr/share/man MANPATH
Tôi sử dụng phương thức này trong các tệp RC của mình, đặt pre_path trước và add_paths thứ hai. Nó làm cho tất cả các thay đổi đường dẫn của tôi dễ hiểu trong nháy mắt. Một lợi ích khác là các dòng đủ ngắn để tôi có thể thêm một nhận xét kéo dài trên một dòng nếu cần thiết.
Và vì đây là các hàm, bạn có thể sử dụng chúng một cách tương tác từ dòng lệnh, chẳng hạn như bằng cách nói add_path $(pwd)
để thêm thư mục hiện tại vào đường dẫn.
PATH=foo:$PATH
có vẻ như sai vì nó giữ mức tăng trưởng mỗi lầnsource ~/.bashrc
và thậm chíexec bash
không thể giúp đỡ kể từ khi$PATH
làexport
.