W moim .profile
używam następującego kodu, aby upewnić się, że aliasy i funkcje związane z Bash są pozyskiwane tylko wtedy, gdy powłoką logowania jest 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
Obecnie jestem w trakcie kontroli plików konfiguracyjnych powłoki, skryptów i funkcji pod kontrolą wersji. Ja również niedawno rozpoczęła proces usuwania przypadkowych Bashisms ze skryptów powłoki, które nie korzystają z Bash-specyficzne cechy, np wymianie function funcname()
z funcname()
.
Dla mojego repozytorium plików powłoki skonfigurowałem hak wstępnego zatwierdzania, który uruchamia checkbashisms
narzędzie z pakietu devscripts Debiana na każdymsh
pliku w repozytorium, aby upewnić się, że nie wprowadzę przypadkowo składni specyficznej dla Bash. Rodzi to jednak błąd dla mojego .profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
Zastanawiałem się, czy istnieje sposób sprawdzenia, która powłoka jest uruchomiona, co nie wywołałoby ostrzeżenia checkbashisms
.
Sprawdziłem listę zmiennych związanych powłoką wymienionych przez POSIX w nadziei, że jedna z nich mogłaby posłużyć do wyświetlenia bieżącej powłoki. Przyjrzałem się również zmiennym ustawionym w interaktywnej powłoce Dash, ale znowu nie udało mi się znaleźć odpowiedniego kandydata.
W tej chwili wykluczyłem .profile
przetwarzanie checkbashisms
; to mały plik, więc nie jest trudno go sprawdzić ręcznie. Jednak po zbadaniu problemu nadal chciałbym wiedzieć, czy istnieje metoda zgodna z POSIX, aby określić, która powłoka działa (lub przynajmniej sposób, który nie powoduje checkbashisms
awarii).
Dalsze informacje / wyjaśnienia
Jednym z powodów, dla których poddaję pliki konfiguracyjne powłoki kontroli wersji, jest konfiguracja środowiska we wszystkich systemach, na których obecnie loguję się regularnie: Cygwin, Ubuntu i CentOS (zarówno 5, jak i 7, używając Active Directory dla użytkownika poświadczenie). Najczęściej loguję się za pośrednictwem środowisk X Windows / Desktop i SSH dla hostów zdalnych. Chciałbym jednak, aby był to dowód na przyszłość i jak najmniej polegał na zależnościach systemu i innych narzędziach.
Używam checkbashisms
jako prostego, automatycznego sprawdzania poprawności składni plików związanych z powłoką. Nie jest to idealne narzędzie, np. Już nałożyłem na niego łatkę, aby nie narzekała na użycie command -v
w moich skryptach. Podczas badań dowiedziałem się, że rzeczywistym celem programu jest zapewnienie zgodności z polityką Debiana, która, jak rozumiem, opiera się na POSIX 2004, a nie na 2008 (lub jego wersji z 2013 roku).
.bash_profile
źródło, które zarówno .profile
(i warunkowo) .bashrc
.