Linux脚本中获取脚本所在路径

本文遵循BY-SA版权协议,转载请附上原文出处链接。


本文作者: 黑伴白

本文链接: http://heibanbai.com.cn/posts/5000bb47/

Linux脚本中获取脚本所在路径

在 Linux 中,获取当前执行的脚本所在的路径是一个常见的需求,尤其是在脚本中需要引用相对路径时。以下是几种常用的方法:


方法 1:使用 dirname$0

$0 是脚本的名称(包括路径),dirname 可以提取其目录部分。

1
2
3
4
5
6
#!/bin/bash

# 获取脚本所在的绝对路径
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)

echo "脚本所在目录: $SCRIPT_DIR"

说明

  • dirname "$0":获取脚本的相对路径。
  • cd ... && pwd:切换到脚本所在目录并获取绝对路径。

方法 2:使用 BASH_SOURCE(适用于 Bash)

BASH_SOURCE 是一个数组,${BASH_SOURCE[0]} 表示当前脚本的路径。

1
2
3
4
5
6
#!/bin/bash

# 获取脚本所在的绝对路径
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

echo "脚本所在目录: $SCRIPT_DIR"

说明

  • ${BASH_SOURCE[0]}:适用于 Bash,能够正确处理脚本被其他脚本引用的情况。

如果脚本是通过符号链接执行的,可以使用 readlink 获取真实路径。

1
2
3
4
5
6
7
8
9
#!/bin/bash

# 获取脚本的真实路径
SCRIPT_PATH=$(readlink -f "$0")

# 获取脚本所在目录
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")

echo "脚本所在目录: $SCRIPT_DIR"

说明

  • readlink -f "$0":获取脚本的绝对路径,包括解析符号链接。
  • dirname:提取目录部分。

方法 4:兼容性更强的写法

结合 BASH_SOURCEreadlink,适用于更多场景。

1
2
3
4
5
6
7
8
9
#!/bin/bash

# 获取脚本的真实路径
SCRIPT_PATH=$(readlink -f "${BASH_SOURCE[0]}")

# 获取脚本所在目录
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")

echo "脚本所在目录: $SCRIPT_DIR"

方法 5:直接使用 pwd(不推荐)

如果脚本没有切换目录,可以直接使用 pwd 获取当前工作目录。

1
2
3
4
5
6
#!/bin/bash

# 获取当前工作目录
SCRIPT_DIR=$(pwd)

echo "脚本所在目录: $SCRIPT_DIR"

注意

  • 这种方法不推荐,因为如果脚本中切换了目录,pwd 的结果会发生变化。

总结

  • 推荐方法:使用方法 1 或方法 2,简单且兼容性强。
  • 符号链接:如果脚本可能通过符号链接执行,使用方法 3 或方法 4。
  • 避免方法 5:除非明确知道脚本不会切换目录。

通过以上方法,可以可靠地获取脚本所在的路径,便于在脚本中引用相对路径的资源。


蚂蚁🐜再小也是肉🥩!


Linux脚本中获取脚本所在路径
http://heibanbai.com.cn/posts/5000bb47/
作者
黑伴白
发布于
2025年2月19日
许可协议

“您的支持,我的动力!觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付