# The path you want to get information on... (for readability)
your_path=..
# Using /bin/readlink (resolves symlinks)
export SRC_DIR=$(readlink --canonicalize $your_path)
# Using /usr/bin/dirname (keeps symlinks)
export SRC_DIR=$(cd $your_path ; pwd)
8条答案
按热度按时间hgb9j2n61#
在Subshell中更改目录
有一个小技巧可以用来从相对路径获取绝对路径,而不需要更改当前的工作目录。技巧是移动到子shell中的相对路径,然后展开工作目录。例如:
来自脚本的相对路径,而不是调用目录
要从脚本位置更改为相对路径,而不是当前工作目录,可以使用参数展开或 dirname 实用程序。我更喜欢 dirname,因为它更明确一点。这是两个例子。
yv5phkfx2#
readlink
命令不仅能够解析符号链接,还能够规范化相对路径。要小心,因为您可能不希望在所有脚本中解析符号链接的行为。如果你不想解析符号链接,pwd
是最好的;注意使用了一个子shell,所以cd命令不会影响主shell中的工作目录。b09cbbtk3#
我通常用
它应该返回脚本的完整路径,甚至可以解析沿着的所有链接。
monwx1rj4#
挖掘这个旧线程添加我发现工作得很好:
export SRC_DIR =
realpath ..
查看更多信息这里:
http://man7.org/linux/man-pages/man3/realpath.3.html
jljoyd4f5#
当我这样做时,我使用echo如下:
dojqjjoe6#
请改为执行以下操作:
更新:
由于您需要相对于脚本在文件系统上的位置的路径,请使用以下命令:
更新2:
您的脚本必须直接调用,而不是作为
bash /path/to/script.sh
或source foo.sh
调用。添加shebang line,添加执行权限,直接调用脚本。qcbq4gxm7#
用于保存错误代码:
qv7cva1a8#
这里没有一个解决方案对我有效(对于
zsh
)。我想到了这个给了我:
请注意,
$your_path
中的路径必须存在。