linux - 如何在shell脚本中扩展相对路径

我正在编写一个脚本来使用 bash 在 linux 2.6 上设置环境变量。 所以脚本包含如下命令:

export SRC_DIR=..
export LIBPATH=${SRC_DIR}/lib

问题是,当我尝试执行 echo $LIBPATH 时,它显示“../lib”,而不是将 SRC_DIR 扩展为完整路径。我真的希望脚本打印/home/x/lib 之类的东西,而不是 ../lib。

更新 脚本应将 SRC_DIR 评估为从脚本位置向上的一个目录,而不是调用脚本的当前目录

最佳答案

在 Subshel​​l 中更改目录

您可以使用一个小技巧从相对路径获取绝对路径,而无需更改当前工作目录。诀窍是移动到子shell 中的相对路径,然后展开工作目录。例如:

export SRC_DIR=$(cd ..; pwd)

来自脚本而不是调用目录的相对路径

要从脚本位置更改为相对路径,而不是当前工作目录,您可以使用 parameter expansion或 dirname 实用程序。我更喜欢 dirname,因为它更明确一点。这是两个例子。

# Using /usr/bin/dirname.
export SRC_DIR=$(cd "$(dirname "$0")/.."; pwd)

# Using the "remove matching suffix pattern" parameter expansion.
export SRC_DIR=$(cd "${0%/*}/.."; pwd)

https://stackoverflow.com/questions/11621639/

相关文章:

linux - 如何在非阻塞套接字上处理 OpenSSL SSL_ERROR_WANT_READ/W

linux - 如何在 Linux 上传递带感叹号的参数?

linux - 查找匹配的文本并替换下一行

python - 如何在 Python 中监听 Linux 中的 'usb device inser

c++ - 如何在 Linux 中找到 'temp' 目录?

windows - Node.js 开发,windows 还是 linux?

linux - zsh/bash 上不区分大小写的 Glob

linux - 如何告诉 CMake 将构建文件放在哪里?

linux - 如何让 GNU screen 读取 .bash_profile/.bash_rc 更

linux - 如何在 Linux 命令行上解析 CSV 文件?