1. ホーム
  2. bash

[解決済み] bash スクリプトの "${BASH_SOURCE[0]}" と $( cd $( dirname "xxx" && pwd )) の意味について

2022-02-10 11:27:10

質問

これは、bashスクリプトの一部です。

DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source $DIR/framework.sh $@

この2行の意味を誰か説明してください。どうやら${BASH_SOURCE[0]}が存在するディレクトリに移動して pwd の結果をDIRに渡すのですが、${BASH_SOURCE[0]}という構文がまず理解できません。bashには変数配列があるのでしょうか。

DIR=$( $( dirname "${BASH_SOURCE[0]}" )" )

?

解決方法は?

最初の行は 絶対 ではなく、スクリプトのパスを指定します。 相対 のパスが必要です。相対パスは次のようなものです somedir/myscript.sh がどこにあるかわからない場合 somedir があります。絶対パスは次のようなものです。 /home/seumasmac/somedir/myscript.sh この場合、スクリプトがファイルシステム上のどこにあるかが正確にわかります。

${BASH_SOURCE[0]} には、スクリプトの呼び出しに使用されるパスが含まれます。したがって、次のようなものが返されるかもしれません。 somedir/myscript.sh . と似ていますね。 $0 主な違いは、スクリプトが直接呼び出されるのではなく、ソースとして提供される場合にも機能することです。

もし、あなたが dirname somedir/myscript.sh を返すだけです。 somedir . そこで、このスクリプトでは、代わりに cdsomedir を実行し、その後に pwd . これで、ディレクトリへの完全な絶対パスが得られます。

2行目には framework.sh を使用して、同じディレクトリから source コマンドを実行します。