Câu trả lời:
Nó không được gọi bash_profile
, nhưng vị trí tiêu chuẩn cho cấu hình bash toàn cầu là /etc/bash.bashrc
. Người ta thường gọi nó từ /etc/profile
nếu vỏ bị bash. Ví dụ, trong tôi /etc/profile
có:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
Về mặt sử dụng, /etc/profile
cung cấp cấu hình toàn hệ thống cho tất cả các vỏ tương thích Bourne (sh, bash, ksh, v.v.). Thông thường không cần tương đương /etc/bash_profile
, vì mục đích của tệp hồ sơ là kiểm soát hành vi đối với các vỏ đăng nhập. Thông thường bất cứ điều gì bạn muốn làm ở đó sẽ không được cụ thể. /etc/bash.bashrc
là đặc trưng của bash và sẽ được chạy cho cả shell đăng nhập và không đăng nhập.
Để làm phức tạp hơn, có vẻ như OS X thậm chí không có /etc/bash.bashrc
. Điều này có lẽ liên quan đến thực tế là Thiết bị đầu cuối trong OS X mặc định chạy dưới dạng vỏ đăng nhập , do đó, sự khác biệt bị mất:
Một ngoại lệ đối với các nguyên tắc của cửa sổ đầu cuối là Terminal.app của Mac OS X, chạy vỏ đăng nhập theo mặc định cho mỗi cửa sổ đầu cuối mới, gọi .bash_profile thay vì .bashrc. Các trình giả lập thiết bị đầu cuối GUI khác có thể làm tương tự, nhưng hầu hết có xu hướng không.
Tôi không chạy OS X, vì vậy phạm vi kiến thức của tôi kết thúc ở đó.
/etc/profile
trong Ubuntu 12.04. Thay vào đó, bạn sẽ đề xuất gì nếu ai đó muốn một /etc/profile
cái chỉ được thực hiện trong bash và không có shell tương thích sh nào khác?
/etc/profile
cho hệ thống của tôi chứa một nhận xét ở đầu có nội dung : # System-wide .profile for sh(1)
. Điều này có nghĩa profile
là sh
cụ thể? Có sh
bằng cách nào đó chạy trước bash
?
sh
là một tập hợp con của bash
. /etc/profile
được thực hiện cho sh
, bash
và tất cả vỏ Bourne-tương thích khác.
/etc/bashrc
trên mac, không phải /etc/bash.bashrc
. Nó cũng xuất hiện để chạy /bin/sh
là tốt.
/etc/profile
là toàn cầu bash_profile
. Không có tệp nào dành riêng cho bash, bash chỉ đọc tệp chuẩn được đọc bởi tất cả các kiểu vỏ Bourne. Đó là nơi bạn có thể đặt các biến môi trường toàn hệ thống.
Xem Có tệp tương đương ".bashrc" được đọc bởi tất cả các shell không? để biết tổng quan chung về các tệp khởi động chung của bash.
Điều này không tải /etc/profile
, vì vậy không có gì trong /etc/profile.d/
được tải (không giống như shell đăng nhập, xem phần cuối).
Tệp toàn cầu cho điều này là / etc / bashrc hoặc /etc/bash.bashrc (tùy thuộc vào -DSYS_BASHRC=
cờ được đặt tại thời gian biên dịch):
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
return
fi
PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
Thông thường nên để lại tệp này nguyên trạng (càng nhiều càng tốt) để tránh xung đột. Chiến lược tôi sử dụng tương tự như chiến lược sử dụng shell (/ etc / profile).
Chiến lược của tôi là nối thêm một trình tải vào tệp trên:
# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d
# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
for script in /etc/bashrc.d/*.sh; do
test -r "$script" && . "$script"
done
unset item
fi
EOF
Bây giờ tôi có thể dễ dàng thêm n tùy chỉnh vào tệp shell tương tác toàn cầu (bash) bằng cách đặt .shfiles mới vào thư mục /etc/bashrc.d.
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
Bạn có thể làm điều này với một lớp lót này:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
Nếu sau khi đọc xong, bạn vẫn không bị thuyết phục, hãy làm điều này để thuyết phục bản thân:
printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh
Mở trình giả lập thiết bị đầu cuối mới và tìm kiếm một số từ phổ biến trong thư mục người dùng của bạn như "the" bằng grep
grep -r 'the'
Không có gì nên được tô màu. Thực hiện tương tự trong bảng điều khiển ảo bằng cách thực hiện CTRLALTF1 (hãy nhớ rằng máy chủ X của bạn có thể đang chạy tại CTRLALTF7 để bạn có thể chuyển trở lại. Ví dụ: nếu bạn quên, chỉ cần khởi động lại trình quản lý máy tính để bàn của bạn)
grep -r 'the'
sẽ mang lại kết quả màu như mong muốn.
Không có gì nên được tô màu. Thực hiện tương tự trong bảng điều khiển ảo bằng cách thực hiện CTRLALTF1(hãy nhớ rằng máy chủ X của bạn có thể đang chạy CTRLALTF7để bạn có thể chuyển trở lại. Nếu bạn quên, chỉ cần khởi động lại trình quản lý máy tính để bàn của bạn)
grep -r 'the'
sẽ mang lại kết quả màu như mong muốn.
Một vỏ đăng nhập là những gì bạn nhận được khi bạn khởi động máy hoặc chuyển đổi bảng điều khiển ảo CTRLALTF1thông qua FNthbảng điều khiển ảo.
Shell đăng nhập tải /etc/profile
trong khi tải /etc/profile.d/*.sh
tập tin.
/etc/bash.bashrc
từ một vỏ không tương tác./etc/profile
có thể được đọc bởi vỏ không tương tác. Xem sự khác biệt giữa Shell đăng nhập và Shell không đăng nhập?