Theo tôi .profile
, tôi sử dụng đoạn mã sau để đảm bảo rằng các bí danh và hàm liên quan đến Bash chỉ có nguồn gốc nếu vỏ đăng nhập thực sự là Bash :
# If the current (login) shell is Bash, then
if [ "${BASH_VERSION:-}" ]; then
# source ~/.bashrc if it exists.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Tôi hiện đang trong quá trình đặt các tệp cấu hình shell, tập lệnh và chức năng của mình dưới sự kiểm soát phiên bản. Gần đây tôi cũng đã bắt đầu quá trình loại bỏ Bashism thông thường khỏi các tập lệnh shell không được hưởng lợi từ các tính năng dành riêng cho Bash, ví dụ: thay thế function funcname()
bằng funcname()
.
Đối với kho lưu trữ file shell của tôi, tôi đã cấu hình một cam kết trước móc chạy các checkbashisms
tiện ích từ Debian của gói devscripts trên mỗi sh
tập tin trong kho để đảm bảo rằng tôi không vô tình giới thiệu cú pháp Bash cụ thể. Tuy nhiên, điều này gây ra lỗi cho tôi .profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
Tôi đã tự hỏi nếu có một cách để kiểm tra xem vỏ nào đang chạy sẽ không kích hoạt cảnh báo checkbashisms
.
Tôi đã kiểm tra danh sách các biến liên quan đến shell được liệt kê bởi POSIX với hy vọng rằng một trong số chúng có thể được sử dụng để hiển thị shell hiện tại. Tôi cũng đã xem xét các biến được đặt trong trình bao Dash tương tác, nhưng, một lần nữa, không tìm được ứng cử viên phù hợp.
Hiện tại, tôi đã loại trừ .profile
khỏi bị xử lý bởi checkbashisms
; đó là một tập tin nhỏ nên không khó để kiểm tra thủ công. Tuy nhiên, khi nghiên cứu vấn đề này, tôi vẫn muốn biết liệu có phương pháp tuân thủ POSIX nào để xác định lớp vỏ nào đang chạy hay không (hoặc ít nhất là một cách không gây ra checkbashisms
lỗi).
Thông tin cơ bản / làm rõ
Một trong những lý do khiến tôi đặt các tệp cấu hình shell của mình dưới sự kiểm soát phiên bản là để định cấu hình môi trường của tôi trên tất cả các hệ thống mà tôi hiện đang đăng nhập thường xuyên: Cygwin, Ubuntu và CentOS (cả 5 và 7, sử dụng Active Directory cho người dùng xác thực). Tôi thường xuyên đăng nhập thông qua X Windows / môi trường máy tính để bàn và SSH cho các máy chủ từ xa. Tuy nhiên, tôi muốn đây là bằng chứng trong tương lai và có ít sự phụ thuộc nhất vào hệ thống phụ thuộc và các công cụ khác nhất có thể.
Tôi đã sử dụng checkbashisms
như một kiểm tra độ tỉnh táo tự động đơn giản cho cú pháp của các tệp liên quan đến vỏ của tôi. Nó không phải là một công cụ hoàn hảo, ví dụ, tôi đã áp dụng một bản vá cho nó để nó không phàn nàn về việc sử dụng các command -v
tập lệnh của tôi. Trong khi nghiên cứu, tôi đã học được rằng mục đích thực tế của chương trình là đảm bảo tuân thủ chính sách Debian, theo tôi hiểu, dựa trên POSIX 2004 chứ không phải 2008 (hoặc sửa đổi năm 2013).
.bash_profile
nguồn đó cả .profile
và (có điều kiện) .bashrc
.