给出以下内容:
# a.sh
source ./stuff/b.sh
和
# b.sh
source ./c.sh
文件夹结构
- a.sh
- stuff
- b.sh
- c.sh
运行a.sh
时,会出现错误./c.sh: No such file or directory
虽然我可以为c设置绝对路径,但我宁愿保持相对,因为脚本可以在多个位置运行。
有可能吗?
答案 0 :(得分:2)
实现您想要的便携式解决方案包括将文件b.sh
的内容替换为:
#!/usr/bin/env bash
# (file b.sh)
srcdir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )
source "$srcdir/c.sh"
作为旁注,请注意,可能没有必要来源文件:如果您需要在环境shell会话中导出c.sh
中定义的变量,它尤其有用。否则(如果您只需要将c.sh
作为独立脚本运行),您可能希望将上面的脚本替换为:
#!/usr/bin/env bash
# (file b.sh)
srcdir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )
"$srcdir/c.sh"
同时:
#!/usr/bin/env bash
#!/bin/bash
或c.sh
c.sh
chmod a+x c.sh
的可执行位