web-dev-qa-db-ja.com

zashシェルから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:

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

質問:BSH_SOURCEを含むbashスクリプトをzshから調達できますか?

3
rual93

. /path/to/that/script.bashを実行する代わりに、次のようにします。

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

emulate ksh -c '...'は、コードをkshエミュレーションで実行し(たとえば、配列のインデックスはbashのように0から始まります)、その中で定義されたすべての関数がそのエミュレーションモードを確実に継承するようにします。

bash$BASH_SOURCEは、取得されるファイルを参照するため、その変数の前にスクリプトのパスを指定します。

zshコードと同等のbashは次のようになります。

export SOME_VARIABLE=$0:h:P

:hhead cshと同様(dirnameと同等)、:P GNUと同等readlink -f)。

3