DIR ="$(cd"$(dirname"$ {BASH_SOURCE [0]}")"&& pwd""这是如何工作的?

Ani*_*udh 37 unix linux bash shell scripting

我需要获得脚本的路径.我可以使用,pwd如果我已经在同一目录,我在网上搜索,我发现了这一点

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

但我不知道如何使用它.

Our*_*rus 38

Bash维护了许多变量,包括BASH_SOURCE源文件路径名的数组.

${} 充当变量的引用.

$() 作为命令的一种引用,但它们在自己的上下文中运行.

dirname 为您提供所提供参数的路径部分.

cd 更改当前目录.

pwd 给出了当前的路径.

&&是一个逻辑and但在这个实例中用于一个接一个地运行命令的副作用.

总之,该命令获取脚本的源文件路径名,将其剥离到路径部分,cds到该路径,然后用于pwd返回脚本的(有效)完整路径.这是分配给DIR.在所有这些之后,上下文被解开,因此您最终返回到您开始的目录中,但是DIR包含脚本路径的环境变量.

  • @Anirudh 它只是让脚本知道它自己的位置,而不是你当前的位置。如果您只需要运行脚本时当前所在的位置,那就简单多了:`DIR="$( pwd )"` (4认同)
  • 我认为这个答案也应该解释为什么 `${BASH_SOURCE[0]}` 而不是 `${BASH_SOURCE}`。否则它是完美的。 (2认同)
  • https://www.electrictoolbox.com/bash-script-directory/添加了这种方法与运行`dirname $ 0`的基本选项有何不同的有用上下文(即它确保路径是绝对的,只有shell内置命令,如/sf/answers/274079431/和该问题的其他答案中所述). (2认同)