获取当前目录并连接路径

时间:2015-05-12 10:12:53

标签: shell

这是一个shell脚本(.sh文件)。我需要根据当前目录创建一个绝对路径。我知道pwd,但如何将其与另一个字符串连接?这是我想要做的一个例子:

"$pwd/some/path"

4 个答案:

答案 0 :(得分:30)

听起来像你想要的那样:

path="$(pwd)/some/path"

$(打开一个子shell(并且)关闭它),其中内容作为脚本执行,因此任何输出都放在字符串中的该位置。

更有用的是获取正在运行的脚本的目录:

dot="$(cd "$(dirname "$0")"; pwd)"
path="$dot/some/path"

这更有用,因为无论您在何处运行脚本,它都会解析为相同的路径:

> pwd
~
> ./my_project/my_script.sh
~/my_project/some/path

而不是:

> pwd
~
> ./my_project/my_script.sh
~/some/path
> cd my_project
> pwd
~/my_project
> ./my_script.sh
~/my_project/some/path

更复杂但是如果你需要当前脚本的目录运行,如果它已经通过符号链接执行(例如,当通过自制程序安装脚本时常见),那么你需要解析并遵循符号链接:

if [[ "$OSTYPE" == *darwin* ]]; then
  READLINK_CMD='greadlink'
else
  READLINK_CMD='readlink'
fi

dot="$(cd "$(dirname "$([ -L "$0" ] && $READLINK_CMD -f "$0" || echo "$0")")"; pwd)"

更复杂,更多要求它工作(例如安装了gnu兼容的readlink)所以我倾向于不使用它。只有当我确定我需要它时,比如通过自制软件安装命令。

答案 1 :(得分:5)

在命令替换(pwd)中使用shell内置$(...)是一个选项,但不是必需的,因为所有与POSIX兼容的shell定义了特殊的$PWD shell变量包含当前目录作为绝对路径,为mandated by POSIX

因此,使用$PWD$(pwd) 更简单,更高效:

"$PWD/some/path"  # alternatively, for visual clarity: "${PWD}/some/path"

但是,如果你想在目录路径中解析符号链接你需要pwd ,其 -P选项

"$(pwd -P)/some/path"

请注意POSIX mandates that $PWD contain an absolute pathname with symlinks resolved。 但实际上,没有类似POSIX的主要shell(bashdashkshzsh)可以做到这一点 - 它们都保留了符号链接组件。因此,需要(POSIX兼容)pwd -P来解决它们 请注意,所有类似POSIX的shell都将pwd实现为支持-P内置

Michael Allen's helpful answer指出通常想知道运行脚本所在的目录

挑战是脚本文件本身可能是符号链接,因此确定原始真实目录非平凡 ,特别是在必须携带时 This answer(我的)显示了解决方案。

答案 2 :(得分:0)

wd=`pwd`
new_path="$wd/some/path"

答案 3 :(得分:0)

与" dirname $0"你可以获得动态路径到当前运行的scipt。 例如:您的文件位于shell文件夹中,文件名是xyz,并且在xyz文件中包含anthor文件abc。 所以放入xyz文件LIke:

       php   "`dirname $0`"/abc.php