我在下面提到的文件夹中有两个脚本:
我想从1.sh脚本运行2.sh脚本。 我该如何编写2.sh脚本的路径?
1.sh:
DIR=/../../ccc/eee/
SCRIPT_NAME="2.sh"
${DIR}/${SCRIPT_NAME}
上面的代码(特别是dir referention)好吗?
答案 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.sh
和2.sh
的位置如何相互关联。
答案 1 :(得分:1)
您不能只使用../../<DIRS>
,因为..
会根据您的位置而改变,这就是$PWD
;而不是使用..
的脚本在哪里。
realpath
和dirname
startdir="$(dirname "$(realpath "$0")")"
script="2.sh"
"$startdir"/../../"$script"
如果您无权访问realpath
和dirname
或不想使用它们:如果您知道2.sh
和1.sh
的位置, 从不更改,那么您应该使用2.sh
"$HOME"/code/scripts/2.sh