Tại sao cài đặt bí danh trong .profile không hoạt động?


11

Tôi có dòng này là dòng cuối cùng trong .profile của tôi:

alias gl="cd /home/jrenner/glances/glances"

Ngay cả sau khi khởi động lại, tôi nhận được lệnh không tìm thấy khi gõ gl. Chuyện gì đang xảy ra vậy? Tôi đăng nhập như người dùng chính xác.


Bạn đang gõ ở glđâu? Nhà ga? GUI?
Thomas Ward

1
Không ai từng đề cập đến bản gốc tại sao? câu hỏi Tôi có thể xác nhận rằng các bí danh được xác định trong .profilekhông hoạt động trong bất kỳ ngữ cảnh nào tôi đã thử: đăng nhập bảng điều khiển văn bản, thiết bị đầu cuối đồ họa hoặc bất cứ thứ gì khác, mặc dù các biến môi trường từ cùng một tệp đều hoạt động.
Daniel Mahler

@DanielMahler, bạn có lý do tại sao không?
Maged Saeed

Câu trả lời:


4

Tôi khá chắc chắn rằng ý tưởng của lpanebr sẽ hoạt động, nhưng đây là một giải pháp thanh lịch hơn. Thực hiện lệnh bí danh .bashrc đó là cách tôi thực hiện hoặc một số người thích thêm tệp dành riêng cho bí danh. Gọi nó .aliashoặc bất cứ điều gì và thêm .aliasvào của bạn.bashrc

Ước gì tôi có thể làm định dạng như @lpanelbr. Tôi tự hỏi nếu có một wiki?


1
Đối với định dạng, Askubfox sử dụng markdown. Vui lòng kiểm tra Askubfox.com/editing-help để biết chi tiết.
saji89

1
Tại sao không .bashrclàm việc trong khi .profilekhông? Ngoài ra, bất kỳ lý do tại sao bạn chọn đặt tên tệp bí danh .alliaschứ không phải .alias?
Tom

# 1 Từ những gì tôi hiểu .bashrc dành riêng cho bash và .profile dành riêng cho dòng lệnh không bash. # 2 Tôi không biết ý của bạn là gì. Tôi có thể đánh vần sau tất cả. (chỉnh sửa)
Jason

7

Có hai lý do liên quan tại sao bí danh không luôn hoạt động khi được đặt trong .profiletệp. Đầu tiên là tệp .profile(hoặc .bash_profile) chỉ được chạy cho một vỏ đăng nhập. Nếu bạn đang bắt đầu bash trong một cửa sổ đầu cuối bên dưới X, trình giả lập thiết bị đầu cuối của bạn (ví dụ: gnome-termanl) có thể không chạy bash như một vỏ đăng nhập. [Hầu hết đều có tùy chọn để thay đổi điều này nếu bạn muốn nhưng mặc định (đối với gnome-termal) không phải là chạy nó như một vỏ đăng nhập.]
Shell sẽ là một vỏ tương tác và do đó .bashrcsẽ được chạy.

Tuy nhiên, thông thường bash đã được chạy dưới dạng shell đăng nhập khi phiên X đang được bắt đầu. Vì vậy, nếu có các lệnh bí danh, .profilechúng sẽ được thực thi cùng với việc thiết lập các biến môi trường như PATH, v.v. Khi cửa sổ đầu cuối được mở, một phiên bản bash mới được chạy để nhắc và thực thi các lệnh trong cửa sổ đầu cuối đó. Không giống như các biến môi trường, các bí danh không thể được xuất từ ​​một phiên bản bash sang một biến mới được bắt đầu bởi nó. Vì vậy, các bí danh không được chuyển sang vỏ mới.

Để xem điều này, hãy thử thí nghiệm này:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Lưu ý rằng .bashrckhông được chạy bởi bash khi nó được bắt đầu như một vỏ đăng nhập. Vì vậy, đặt bí danh của bạn ở đó sẽ không luôn hoạt động trừ khi bạn .bashrccó nguồn gốc từ bạn .profile, đó là một thực tế rất phổ biến.


Đã xác minh: thêm source .bashrcvào .bash_profilecho phép bí danh được đặt trong .bashrc hoạt động.
Cá cây Zhang

Có vẻ như đây là câu trả lời chính xác. Ngoài ra, trong Ubuntu chỉ cần thêm bí danh của bạn vào ~/.bash_aliases. Đó là cách đúng đắn để làm điều đó. (đọc tệp .bashrc để biết chi tiết).
Emilio M.

0

Nếu bạn đang sử dụng bash ( echo $SHELL) làm trình thông dịch shell, tôi nghĩ rằng đó là cách tốt nhất (hoặc có thể là cách duy nhất) nếu bạn xác định chức năng CD của riêng mình.

Chỉnh sửa .bashrctệp của bạn và thêm phần sau vào cuối:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

Bạn cũng có thể mở rộng nó như vậy:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

và thay đổi trực tiếp đến một thư mục con và liệt kê nội dung của nó.


1
Đó có thể là một gợi ý tốt, nhưng nó không phải là một câu trả lời, vì nó không giải thích tại sao lệnh aliasđược đặt trong .profiletệp không thành công.
Tom

0
$ bash #start a new bash instance

Đây là vấn đề với máy chủ của tôi. Đơn giản là source .profilekhông làm việc vì một số lý do


0

Cách đúng đắn để làm điều này trong Ubuntu là thêm bí danh của bạn vào ~/.bash_aliases. Tạo tập tin nếu nó không tồn tại.

Tệp này (nếu có) được gọi từ mặc định ~/.bashrcvà bí danh cũng sẽ có sẵn trong trình giả lập thiết bị đầu cuối của bạn.

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.