Bash không đọc .bashrc trừ khi bắt đầu bằng tay


22

bashsẽ không lấy nguồn .bashrctừ thiết bị đầu cuối tương tác trừ khi tôi tự chạy bashtừ thiết bị đầu cuối:

$ bash

hoặc tự tìm nguồn:

$ source ./.bashrc

hoặc chạy:

$ st -e bash

Đây là một số đầu ra hữu ích tôi hy vọng:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Tôi đang dùng CRUX Linux 3.0 và tôi sử dụng dwmst. Tôi đã thử sử dụng .bash_profile.profilekhông thành công.

Có ý kiến ​​gì không?

Câu trả lời:


19

Tại sao nó sẽ nguồn nó? Bạn không chạy đúng bash:

$ echo $SHELL
/bin/sh

Trong hầu hết các hệ thống hiện đại shlà một liên kết tượng trưng đến lớp vỏ cơ bản. Trên Debian của tôi chẳng hạn:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

Trong trường hợp của bạn, shlà một liên kết đến bashnhưng, như được giải thích trong man bash:

Nếu bash được gọi với tên sh, nó sẽ cố gắng bắt chước hành vi khởi động của các phiên bản lịch sử của sh càng gần càng tốt, đồng thời tuân thủ tiêu chuẩn POSIX. [...] Khi được gọi dưới dạng vỏ tương tác với tên sh, bash tìm biến ENV, mở rộng giá trị của nó nếu được xác định và sử dụng giá trị mở rộng làm tên của tệp để đọc và thực thi. Do shell được gọi là sh không cố đọc và thực thi các lệnh từ bất kỳ tệp khởi động nào khác , nên tùy chọn --rcfile không có hiệu lực.

--norc
Không đọc và thực thi tệp khởi tạo trên toàn hệ thống /etc/bash.bashrc và tệp khởi tạo cá nhân ~ / .bashrc nếu trình bao tương tác. Tùy chọn này được bật theo mặc định nếu shell được gọi là sh.

Vì vậy, vì shell mặc định của bạn là sh, .bashrckhông được đọc. Chỉ cần đặt shell mặc định của bạn thành bash bằng cách sử dụng chsh -s /bin/bash.


Cảm ơn bạn. Tôi cho rằng nó không quan trọng kể từ khi /bin/shchỉ vào /bin/bash. Tôi cho rằng vấn đề này xuất phát từ việc không gán vỏ một cách rõ ràng /bin/bashkhi tôi tạo tài khoản người dùng ban đầu.
vội vàng

Ngoài ra, Debian / Ubuntu chuyển sang dashcho /bin/shnhư là một phần của nỗ lực để giảm thời gian khởi động. Điều này thật buồn cười khi người dùng của tôi bắt đầu hỏi tại sao vỏ của họ lại hoạt động khác nhau.
kurtm

18

Trong .bash_profile đảm bảo bạn có những điều sau đây:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi

1
@terdon Câu trả lời của bạn là đúng. Câu trả lời của tôi sẽ chỉ có giá trị nếu anh ta đang chạy bash. Bắt tốt đẹp, tôi đã bỏ lỡ điều đó.
Jeight

Điều này có thể khiến bạn đau đầu nếu bạn chạy bashbên cạnh lớp vỏ khác, chẳng hạn như ksh93sử dụng .profiletheo mặc định.
Kusalananda

Nếu ~ / .bash_profile không tồn tại, bạn có thể tạo nó.
Pratik Singhal

.bashrc trong HĐH dựa trên Debain, .bash_profile trong CentOS / Fedora / Mac OS
Mitoxys
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.