zshシェルからBASH_SOURCEを含むbashスクリプトを取得するには?

zshシェルからBASH_SOURCEを含むbashスクリプトを取得するには?

次のbashスクリプトがあります。

...
SOME_VARIABLE=$(readlink -f $(dirname ${BASH_SOURCE[0]}))
export SOME_VARIABLE
...

定義されたすべての環境変数が必要なため、zshシェルからインポートする必要があります。

問題はBASH_SOURCEが原因で発生します。次のエラーメッセージが表示されます。

dirname: missing operand
Try 'dirname --help' for more information.
readlink: missing operand
Try 'readlink --help' for more information.
Invalid location:

制限: スクリプトを変更できません。

質問:zshからBASH_SOURCEを含むbashスクリプトを取得できますか?

ベストアンサー1

. /path/to/that/script.bash代わりに、以下を実行しないでください。

BASH_SOURCE=/path/to/that/script.bash emulate ksh -c '. "$BASH_SOURCE"'

emulate ksh -c '...'シミュレーションでコードを実行しksh(例:配列インデックス付けはbashと同様に0から始まります)、ここで定義されているすべての関数がシミュレーションモードを継承していることを確認してください。

$BASH_SOURCEin はbashインポートするファイルを参照するため、変数をスクリプトパスで事前入力します。

zshこのコードに対応するものは次のとおりですbash

export SOME_VARIABLE=$0:h:P

:h与えられたcshと同じです(と同じdirname)。:PGNUと同じreadlink -f

とにかく、

SOME_VARIABLE=$(readlink -f $(ディレクトリ名${BASH_SOURCE[0]}))

bash必要なコードが正しくありません。

SOME_VARIABLE=$(
  readlink -f -- "$(dirname -- "$BASH_SOURCE")"
)

それにもかかわらず、$BASH_SOURCEdirnameの前後に改行文字が続くと機能しませんreadlink -f

おすすめ記事