1

古いシェル スクリプトを更新して新しい構成で実行するようにしています。シェル スクリプトは比較的初めてですが、ほとんどのスクリプトについては概ね問題ありませんでした。ただし、次の行が何をしているのかを正確に把握するのに苦労しています。この特定の行は、別の実行中のスクリプトから呼び出され、UNIX タイプのマシンで実行されていますが、それがどの程度関連しているかはわかりません。

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

私の質問は基本的に、これが呼び出されて保存されているディレクトリに対して、実際にどのディレクトリを指しているのかということです。また、その && はそこで何をしているのですか?2 つのディレクトリ間に論理演算子があるのは非常に奇妙に思えますが、やはり私はシェル スクリプトにかなり慣れていません。

4

2 に答える 2

3

スクリプトがあるディレクトリを保存するだけです:

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

commandA && commandB条件は次のように評価されます。

commandBcommandAゼロの終了ステータスを返す場合にのみ実行されます。であるため、ディレクトリが存在するcd something場合は true を返しますsomething。そうでない場合は、終了ステータス false を返すため、pwd実行されません。

グラフ的には、次のように説明できます。

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &&        pwd          )"
DIR="$( cd (    dir (  name_of_script  )   )  &&  print current dir  )"
DIR="$( move to the dir of the script         &&  print current dir  )"
DIR= "name of the dir you have moved , that is, the dir of the script"
于 2013-05-30T18:44:27.363 に答える
2
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|     |  |  |   |          |___ First value   |   |______ prints current working directory
|     |  |  |   |               of array      |___Logical AND operator
|     |  |  |   |__ Command to strip non-directory suffix
|     |  |  |
|     |  |  |__ Doing command substitution again to evaluate whats inside $()
|     |  |
|     |  |___ Changing directory
|     |
|     |_____ $() is construct for command substitution
|
|____ Creating and assigning a variable called DIR
于 2013-05-30T18:48:58.813 に答える