运行脚本存在于另一个文件夹中

时间:2014-04-21 19:58:25

标签: bash sh

我在下面提到的文件夹中有两个脚本:

  • /folder_aaa/bbb/ddd/1.sh
  • /folder_aaa/ccc/eee/2.sh

我想从1.sh脚本运行2.sh脚本。 我该如何编写2.sh脚本的路径?

1.sh:

DIR=/../../ccc/eee/
SCRIPT_NAME="2.sh"

${DIR}/${SCRIPT_NAME}

上面的代码(特别是dir referention)好吗?

2 个答案:

答案 0 :(得分:1)

相对路径不应以/开头(可以,但由于/是其自己的父级,因此任意数量的前导/..都是多余的)。您的DIR相当于/ccc/eee。所以你想要

DIR=../../ccc/eee
SCRIPT_NAME="2.sh"
${DIR}/${SCRIPT_NAME}

但是,这假定1.sh的位置永远不会相对于2.sh更改。您可以改为使用2.sh的绝对路径:

DIR=/folder_aaa/ccc/eee

当然,这假设2.sh的绝对路径不会发生变化。您使用哪一个是首选项,以及1.sh2.sh的位置如何相互关联。

答案 1 :(得分:1)

您不能只使用../../<DIRS>,因为..会根据的位置而改变,这就是$PWD;而不是使用.. 的脚本在哪里

使用realpathdirname

startdir="$(dirname "$(realpath "$0")")"
script="2.sh"
"$startdir"/../../"$script"

使用绝对路径

如果您无权访问realpathdirname或不想使用它们:如果您知道2.sh1.sh的位置, 从不更改,那么您应该使用2.sh

的绝对路径
"$HOME"/code/scripts/2.sh