Bash_profile toàn cầu


20

Tôi nhận thấy có /etc/profile/etc/bashrccác tệp để thiết lập các biến môi trường toàn cầu và có lẽ tôi chỉ hiểu sai mục đích của chúng, nhưng ...

Có một bash_profiletập tin toàn cầu ?

Tôi đang sử dụng Mac OS X

Câu trả lời:


15

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/profilenếu vỏ bị bash. Ví dụ, trong tôi /etc/profilecó:

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/profilecung 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.bashrclà đặ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 ở đó.


Đừng đọc /etc/bash.bashrctừ một vỏ không tương tác. /etc/profilecó 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?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles - Tôi không rõ bạn đang cố gắng làm gì ở đây. Một vỏ đăng nhập không tương tác là một điều bất thường thực sự. Để tham khảo, mã tôi trích dẫn không phải là sáng tạo của riêng tôi. Đó là từ mặc định /etc/profiletrong Ubuntu 12.04. Thay vào đó, bạn sẽ đề xuất gì nếu ai đó muốn một /etc/profilecái chỉ được thực hiện trong bash và không có shell tương thích sh nào khác?
ire_and_curses

Tệp hệ thống /etc/profilecho 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 profileshcụ thể? Có shbằng cách nào đó chạy trước bash?

@Josh Voigts - shlà một tập hợp con của bash. /etc/profileđược thực hiện cho sh, bashvà tất cả vỏ Bourne-tương thích khác.
ire_and_curses

@ire_and_curses Có vẻ như tệp được gọi /etc/bashrctrên mac, không phải /etc/bash.bashrc. Nó cũng xuất hiện để chạy /bin/shlà tốt.
BrainStorm.exe


0

Thiết lập Shell tương tác (Bash) trên toàn cầu

Đ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.

Tô màu Grep toàn cầu

/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

So sánh hồ sơ.d vs bashrc.d

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/profiletrong khi tải /etc/profile.d/*.shtập tin.

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.