次のような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から調達できますか?
. /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
(:h
head cshと同様(dirname
と同等)、:P
GNUと同等readlink -f
)。