Đầu tiên, bí danh là tạm thời và hợp lệ chỉ dành cho Shell hiện đang chạy. Khi bạn chạy bí danh.sh
tập tin, nó thực thi trong vỏ của chính nó, không phải trong trình bao mà nó được chạy từ đó. Vì vậy, các nguồn kịch bản ~/.bash_aliases
(tại sao tập tin này chứ không phải /etc/.bash_aliases
? Tôi nghĩ bạn muốn cái sau?), nhưng khi tập lệnh kết thúc, trình bao cũng thoát ra và bất kỳ bí danh nào có thể đã được xác định trong ~/.bash_aliases
tập tin, họ đã biến mất.
Đó là sự khác biệt giữa đang chạy một kịch bản shell và tìm nguồn cung ứng nó. Nếu bạn chạy tập lệnh trình bao, thì tập lệnh đó sẽ chạy trong trình bao của chính nó, do đó, bất kỳ thay đổi nào đối với môi trường, bí danh và những điều tương tự được thực hiện trong tập lệnh đều không ảnh hưởng đến trình bao chính (trình bao mà tập lệnh được bắt đầu từ đó). Nhưng khi bạn lấy cùng một tập lệnh, nó sẽ thực thi trong vỏ hiện tại, vì vậy tất cả các thay đổi mà nó thực hiện vẫn tồn tại sau khi tập lệnh kết thúc (tất nhiên chúng sẽ tồn tại chừng nào trình bao còn tồn tại - nếu bạn thoát khỏi trình bao, tất cả các thay đổi sẽ biến mất trở lại).
Tính đến điều này, nếu bạn muốn bí danh từ tệp /etc/.bash_aliases
để có sẵn cho bất kỳ người dùng nào Trong bất kỳ shell nào họ chạy, tệp phải được lấy từ /etc/bash.bashrc
tập tin. Tệp này được thực thi bất cứ khi nào bất kỳ trình bao nào (từ bất kỳ người dùng nào) khởi động và thường được sử dụng để đặt môi trường ban đầu.
Vì vậy, nếu bạn thêm dòng sau vào cuối /etc/bash.bashrc
(tất nhiên bạn phải root thì mới có thể chỉnh sửa file được):
nguồn /etc/.bash_aliases
bạn nên có được những gì bạn muốn.
Các bí danh.sh
tập tin không cần thiết ở tất cả.