1

我正在更新一个旧的 shell 脚本以使用新的配置运行,而且我对 shell 脚本比较陌生,但是对于大多数脚本来说,我通常都还可以。但是,我无法弄清楚以下行在做什么。这个特定的行是从另一个正在运行的脚本中调用的,并且正在 UNIX 类型的机器上运行,尽管我不确定这有多相关。

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

我的问题基本上是,相对于它被调用和存储的目录,这实际上指向什么目录?还有那个 && 到底在做什么?在两个目录之间看到一个逻辑运算符似乎很奇怪,但我对 shell 脚本还是很陌生。

4

2 回答 2

3

它只是保存脚本所在的目录:

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

条件评估commandA && commandB如下:

commandB当且仅当commandA返回退出状态为零时才执行。存在,如果目录存在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 回答