使用相对路径从另一个脚本调用一个 shell 脚本

Posted

技术标签:

【中文标题】使用相对路径从另一个脚本调用一个 shell 脚本【英文标题】:Call one shell script from another script using relative paths 【发布时间】:2013-11-14 19:25:36 【问题描述】:

我有一个这样的脚本:

#!/bin/csh
echo "This is the main programme"
./printsth

我想在这个脚本中使用相对路径调用脚本printsth。有没有办法这样做?相对路径是指相对于调用脚本所在位置的路径。

【问题讨论】:

为什么你认为这不起作用?学会打开你的shell调试,即set -vx(或类似的csh)和echo $cwd等,看看你在哪里。祝你好运。 【参考方案1】:

您可以使用$cwd 引用当前工作目录。因此,如果您想使用相对于当前工作目录的路径调用printsth,请以$cwd 开头。

比如你想调用当前目录下的printsth,说:

$cwd/printsth

如果要调用printsth上面的一个目录:

$cwd/../printsth

请确保它是csh 脚本(即第一行是#!/bin/csh)。如果是shbash 脚本,则需要使用$PWD(用于“当前工作目录”),而不是$cwd

编辑:

如果你想要一个相对于脚本目录的目录,而不是当前工作目录,那么你可以这样做:

setenv SCRIPTDIR `dirname $0`
$SCRIPTDIR/printsth

这会将$SCRIPTDIR 设置为与原始脚本相同的目录。然后,您可以构建与此相关的路径。

【讨论】:

不使用 $cwd 和 $pwd 可以做到吗 嗯,实际上,csh 的默认设置是使用当前工作目录,所以./printsth 无论如何都会在 CWD 中查找。如果您想在与原始脚本相同的目录中查找,这实际上有点困难。你想要哪个? 我想在与 orig 脚本相同的目录中查找【参考方案2】:

./printsth 运行脚本并不总是有效,因为相对路径将取决于运行主脚本的目录。

一种解决方案是确保我们进入脚本所在的目录,然后运行它:

cd -P -- "$(dirname -- "$0")"
./printsth

更多示例,请参见:How to set current working directory to the directory of the script?

另见:How to convert absolute path into relative path?

【讨论】:

以上是关于使用相对路径从另一个脚本调用一个 shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章

我可以从另一个 shell 脚本调用一个 shell 脚本的函数吗?

如何调用 shell 脚本并从另一个 shell 脚本传递参数

shell脚本怎么获得当前相对路径

从另一个shell脚本调用函数[重复]

shell脚本常用命令汇总

Shell脚本怎样转相对路径为绝对路径