次の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_SOURCE
in はbash
インポートするファイルを参照するため、変数をスクリプトパスで事前入力します。
zsh
このコードに対応するものは次のとおりですbash
。
export SOME_VARIABLE=$0:h:P
(:h
与えられた頭cshと同じです(と同じdirname
)。:P
GNUと同じreadlink -f
。
とにかく、
SOME_VARIABLE=$(readlink -f $(ディレクトリ名${BASH_SOURCE[0]}))
bash
必要なコードが正しくありません。
SOME_VARIABLE=$(
readlink -f -- "$(dirname -- "$BASH_SOURCE")"
)
それにもかかわらず、$BASH_SOURCE
dirnameの前後に改行文字が続くと機能しませんreadlink -f
。