2016-09-02 2 views
2

私は最近、zshhellで定義されていないため、BASH_SOURCEを参照するスクリプトが失敗していることがわかりました。注:私のbashは自家製のものですから、自作のbashはデフォルトのBASH_SOURCEを変更する可能性があります。bashは常にBASH_SOURCE定義を提供する必要がありますか?そうでない場合、最も良い回避策は何ですか?

  • 問題:/ bin/bashを実行した後、起動したbashシェルでも定義されていないことがわかりました。

私はこの件に関して二つの質問があります。

  • 質問1:任意のbashシェルではサポートされて$BASH_SOURCEは常に定義されていますか?もしそうなら、私は/bin/bashを実行していると仮定し、BASH_SOURCEがbash自体のバグを意味するのを見ていないでしょうか?

  • 質問2:BASH_SOURCEにグローバルにエクスポートする必要がある合理的なデフォルトはありますか?

+2

['$ BASH_SOURCE'](https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html)は配列なので、内容を見るには'printf"%s \ n "" $ {BASH_SOURCE [@]} "'をチェックしてください。 – fedorqui

+2

なぜ 'zsh'で' bash'スクリプトを実行していますか? – chepner

答えて

1

BASH_SOURCEは、FUNCNAME内の対応するシェル関数名が定義されているソースファイル名を含む配列です。 FUNCNAMEは、現在実行呼び出しスタック内にあるすべてのシェル関数の名前を含みます。これは、BASH_SOURCEが現在のセッションに固有であることを意味します。一般的に

、あなたはBASHに、変数の特定を参照している、他のシェルは、コールスタックの処理の異なる実装を持っているので、スクリプトを実行している場合、正しく

をそれを処理しません最初の行#!/bin/bashは、現在のスクリプトのインタプリタを指定します。 bashを使用する場合は、そこにBASHのインストールにバスタブを用意する必要があります

または、bashに切り替えてスクリプトを実行してください。あるいは、zshから/ bin/bashへの引数としてスクリプトを渡すことによって実行できます。どちらを好むか

+0

本当にあなたが$ {BASH_SOURCE}が常に働くことを暗示しているように思えます。 – jayunit100

関連する問題