.bashrc không được thực thi khi mở terminal mới


84

Mã trong .bashrc không thực thi khi tôi mở cửa sổ terminal mới trong Ubuntu 12.04. Tôi nhận thấy điều này khi tạo tệp .bash_aliases. Các bí danh đã không xuất hiện khi tôi mở một thiết bị đầu cuối mới. Tuy nhiên khi tôi gõ source .bashrccác bí danh đã xuất hiện.

.bashrc nên được chạy mỗi khi tôi mở một cửa sổ terminal mới phải không?

Làm thế nào để tôi thực hiện điều này xảy ra?


Hãy thử .profile thay thế.
jippie

4
@jippie Không, .profileđược đọc tại thời điểm đăng nhập, không phải khi bạn mở một thiết bị đầu cuối mới, trừ khi có cấu hình sai ở đâu đó. Selah: bạn có thay đổi gì từ cấu hình mặc định không? Vui lòng chạy ps -o command $$ $PPIDtrong một thiết bị đầu cuối và sao chép-dán đầu ra.
Gilles

1
Chỉ để làm cho chắc chắn tích cực, bạn đang đặt .bashrcvào thư mục nhà của bạn, phải không?
Jjed

Có thể muốn kiểm tra echo $SHELL. Điều này đã xảy ra với tôi và shell là / bin / sh thay vì bash. Sửa nó trong / etc / passwd và .bashrc đang chạy của nó.
Joe Flynn

Câu trả lời:


128

Nó không nhất thiết phải chạy; ở đầu tiêu chuẩn .bashrc là nhận xét này:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Tôi tin rằng có một tùy chọn để chạy bash terminal như là một vỏ đăng nhập hay không. Với Ubuntu, gnome-terminal thường không chạy như một vỏ đăng nhập, vì vậy .bashrc nên được chạy trực tiếp.

Đối với shell đăng nhập (như thiết bị đầu cuối ảo), thông thường tệp ~/.profileđược chạy, trừ khi bạn có ~/.bash_profilehoặc ~/.bash_login, nhưng chúng không có ở đó theo mặc định. Theo mặc định, Ubuntu chỉ sử dụng .profile.

Các tiêu chuẩn ~/.profilecó điều này trong đó:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Điều này chạy .bashrc nếu có sẵn - giả sử $ BASH_VERSION có trong môi trường của bạn. Bạn có thể kiểm tra điều này bằng cách nhập lệnh echo $BASH_VERSIONvà nó sẽ hiển thị một số thông tin về số phiên bản - không nên để trống.


4
Sau khi hiểu các hướng dẫn này, tôi đã vào ứng dụng đầu cuối của mình, tôi đã đi chỉnh sửa -> tùy chọn hồ sơ -> Tiêu đề và Lệnh -> Chạy lệnh dưới dạng vỏ đăng nhập. Tôi đã bỏ chọn này. Cảm ơn đã giúp đỡ.
Selah

Bạn có thể làm rõ khi .profile (do đó .bashrc) được tải / đọc không? Có vẻ như điều này được thực hiện khi người dùng đăng nhập vào phiên máy tính để bàn của họ. Câu trả lời cho thấy điều này xảy ra khi bạn bắt đầu một phiên bản thiết bị đầu cuối / vỏ mới "Đối với các vỏ đăng nhập (như các thiết bị đầu cuối ảo), thông thường tệp ~ / .profile được chạy ..."
hedgekey

4
thường được chạy khi bạn bắt đầu một vỏ đăng nhập mới (không thực sự là phiên máy tính để bàn, bởi vì bạn có thể chạy một vỏ đăng nhập mới từ phiên máy tính để bàn). Như tôi đã nói, nó được chạy theo mặc định, nhưng không phải nếu bạn đã tạo ~/.bash_profilehoặc ~/.bash_login. Bạn có thể kiểm tra bằng cách kiểm tra hoặc bỏ chọn hộp kiểm trong Edit -> Profile Preferences -> Title and Command -> "Run command as a login shellvà thoát ra sau đó chạy lại thiết bị đầu cuối. Bạn có thể lặp lại một cái gì đó từ .profile để kiểm tra.
Marty Fried

@Selah Nhận xét của bạn đã giúp tôi nhiều hơn thì câu trả lời thực tế;) cảm ơn rất nhiều vì đã bình luận!
Aleks

Vì vậy, nếu bạn đã tạo ~/.bash_profilehoặc ~/.bash_logintrên hệ thống của mình và muốn giữ chúng, nhưng vẫn muốn ~/.profilevà từ đó ~/.bashrcthực thi, bạn có thể lấy nguồn từ chính bạn ~/.bash_profilehoặc ~/.bash_loginvới một dòng chứa source "$HOME/.profile". Cung cấp cho bạn trở lại đầu ra màu của ls cũng trong vỏ đăng nhập!
tanius

26

Trong trường hợp của tôi, chỉ đơn giản là các .bashrcdòng loader bị thiếu trong.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

Tôi đã thêm nó bằng tay và nó hoạt động với thông tin đăng nhập mới của tôi


3
.bash_profile? Ubuntu sử dụng một .profilemặc định, không .bash_profile.
muru

Máy chủ ubfox thường không tải .bashrc ... ở trên cũng hoạt động nên ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc" # Tải mặc định
Scott Stensland

Điều này đã giải quyết nó cho tôi! Tôi đã thêm pcrevà có vẻ như nó ghi đè lên hồ sơ bash thay vì thêm nó.
shapiro yaacov

7

.bash_profilegiữ cấu hình cho bash shell. Khi bạn mở một thiết bị đầu cuối, đầu tiên nó sẽ đọc và thực thi các lệnh từ đó ~/.bash_profile. Vì vậy, bạn có thể thêm phần sau vào .bash_profileđể thiết lập shell theo bashrc.

. ~/.bashrc

Trừ khi thiết bị đầu cuối của bạn đang chạy shell đăng nhập (mặc định nó không có trong Ubuntu), ~/.bash_profilesẽ không được đọc (và nó không tồn tại theo mặc định trong Ubuntu)
muru

5

Nếu $BASH_VERSIONkhông được đặt, hãy thử sử dụng chshlệnh để đặt shell của bạn thành /bin/bash.

Tôi gặp vấn đề tương tự với 12.04 LTS và hóa ra tài khoản người dùng mới có shell mặc định được đặt thành /bin/shnguyên nhân của sự cố.


Đây là lý do!
mulya

1

Mã hóa cho nhận xét trong .profile

~ / .profile: được thực thi bởi trình thông dịch lệnh cho shell đăng nhập.¬ 11 Tệp này không được đọc bởi bash (1), nếu ~ / .bash_profile hoặc ~ / .bash_login¬ 10 # tồn tại

Vì vậy, bạn đi, nếu ~/.bash_profilehoặc ~/.bash_login exists, những người sẽ được chạy thay vì~/.profile

nếu bạn muốn chạy, ~/.bashrcchỉ cần thêm dòng source ~/.bashrcvàobash_profile


1
Tôi đã trải nghiệm chính xác cùng một vấn đề. My .bashrcđã được cung cấp cho đến khi tôi tạo một .bash_profiletập tin. Vì vậy, tôi đã chuẩn bị source ~/.bashrc dòng cho .bash_profiletập tin của tôi .
Lashae

0

Thay vì đi qua tất cả, chỉ cần đi Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"và trong hộp lệnh tùy chỉnh viết bashvà đóng nó. Lần tới khi bạn mở thiết bị đầu cuối, nó cũng sẽ chạy bash tự động.


GUI nào bạn đang đề cập đến? gnome hoặc đoàn kết
Nic Wanavit
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.