私.profile
ので、次のコードを使用して、ログインシェルが実際にBashである場合にのみ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
現在、シェル構成ファイル、スクリプト、および関数をバージョン管理下に置いています。また、最近、Bash固有の機能の恩恵を受けないカジュアルなBashismをシェルスクリプトから削除するプロセスを開始function funcname()
しましたfuncname()
。たとえば、に置き換えます。
シェルファイルリポジトリには、リポジトリ内の各ファイルでDebianのdevscriptsパッケージからユーティリティを実行するpre-commitフックを設定し、Bash固有の構文を誤って導入しないようにしました。ただし、これによりmyのエラーが発生します。checkbashisms
sh
.profile
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
私は、どのシェルが実行されているかをチェックする方法があり、それが警告をトリガーしないかどうか疑問に思っていましたcheckbashisms
。
POSIXによってリストされたシェル関連の変数のリストをチェックして、現在のシェルを表示するために使用できることを期待しました。また、インタラクティブなDashシェルで設定された変数を調べましたが、適切な候補を見つけることができませんでした。
現時点では、.profile
処理対象から除外していますcheckbashisms
。小さいファイルなので、手動で確認するのは難しくありません。ただし、問題を調査した後、実行中のシェル(または少なくともcheckbashisms
失敗を引き起こさない方法)を判別するPOSIX準拠のメソッドがあるかどうかを知りたいと思います。
さらなる背景/説明
シェル構成ファイルをバージョン管理下に置く理由の1つは、現在ログインしているすべてのシステム(Cygwin、Ubuntu、およびCentOS(両方とも5および7、ユーザー用にActive Directoryを使用)で環境を構成することです)認証)。ほとんどの場合、X Windows /デスクトップ環境とリモートホスト用のSSH経由でログオンします。ただし、これは将来の証拠であり、システムの依存関係や他のツールへの依存を最小限に抑えたいと考えています。
私checkbashisms
は、シェル関連ファイルの構文の単純な自動健全性チェックとして使用しています。これは完璧なツールではありません。たとえば、command -v
スクリプトでの使用について文句を言わないように、既にパッチを適用しています。調査中、プログラムの実際の目的は、2008年(または2013年の改訂版)ではなくPOSIX 2004に基づいたDebianポリシーへの準拠を確保することであることを学びました。
.bash_profile
両方をソース.profile
とするを書いてください.bashrc
。