現在のシェルを決定するためにcheckbashismに従います。

現在のシェルを決定するためにcheckbashismに従います。

鉱山では、.profileログインシェルが実際に実行されたときに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関連function funcname()の機能の恩恵を受けていないシェルスクリプトからランダムBashismを削除し始めましたfuncname()

私のシェルファイルストアの場合は設定しました。事前コミットcheckbashismsDebian ユーティリティを実行するためのフック開発スクリプトパッケージsh誤ってBash関連の構文を導入しないように、リポジトリ内のすべてのファイルを削除してください。ただし、これによりエラーが発生します.profile

possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then

どのシェルが実行されているかを確認し、.NETで実行しない方法があるかどうか疑問に思いますcheckbashisms

リストを確認しました。POSIX リストされたシェル関連変数これらのいずれかを使用して現在のシェルを表示できることを願っています。また、インタラクティブなDashシェルで設定された変数を調べましたが、適切な候補を見つけることができませんでした。

.profile現在は;の処理を除外しました。checkbashismsファイルサイズが小さく、手動で確認するのは難しくありません。しかし、この問題を調査した後でも、どのシェルが実行されているかを確認するPOSIX準拠の方法(または少なくともcheckbashismsエラーを引き起こさない方法)があるかどうかはまだ疑問に思います。


追加の背景/説明

シェル構成ファイルをバージョン管理にする理由の1つは、現在定期的にログインしているすべてのシステム(Cygwin、Ubuntu、およびCentOS(5および7、ユーザー認証にActive Directoryを使用))で自分の環境を構成することです。私はX Windows /デスクトップ環境とSSHを介してリモートホストにログインすることがよくあります。しかし、私はこれが将来に備えて、システムの依存関係や他のツールへの依存関係をできるだけ最小限に抑えたいと思います。

checkbashisms私はシェル関連ファイルの構文に対して単純で自動化された完全性チェックを実行するためにこれを使用してきました。完璧なツールではありません。たとえば、command -vスクリプトで使用するときに文句を言わないようにパッチを適用しました。調査中、私はこのプログラムの実際の目的は、私が知っている限り、2008年(または2013年改訂版)ではなく、POSIX 2004ベースのDebianポリシーに準拠することを保証することでした。

ベストアンサー1

通常、$0この目的に使用されます。リンクしたサイトの内容は次のとおりです。

0
   (Zero.) Expands to the name of the shell or shell script.

おすすめ記事