我在同一个文件夹中有两个Bash脚本(由下载整个存储库的用户保存在某处):
> script.sh由用户运行
> helper.sh是必需的,由script.sh运行
这两个脚本应位于同一目录中.我需要第一个脚本来调用第二个脚本,但有两个问题:
>了解当前的工作目录对我来说没用,因为我不知道用户是如何执行第一个脚本的(可能是/usr/bin/script.sh,带有./script.sh,或者它可能与../Downloads/repo/scr/script.sh)
>在调用helper.sh之前,脚本script.sh将更改为其他目录.
我绝对可以通过在一个变量中存储the current directory来实现这一点,但是这个代码看起来很复杂,我认为这是一个非常常见和简单的任务.
有没有一种标准的方法可以在script.sh中可靠地调用helper.sh?并且可以在任何支持Bash的操作系统中使用吗?
由于$0保存了正在运行的脚本的完整路径,因此您可以使用
dirname
来获取脚本的路径:
#!/bin/bash script_name=$0 script_full_path=$(dirname "$0") echo "script_name: $script_name" echo "full path: $script_full_path"
所以,如果您将它存储在/tmp/a.sh中,那么您将看到如下输出:
$/tmp/a.sh script_name: /tmp/a.sh full path: /tmp
所以
- Knowing the current working directory is useless to me,because I don’t know how the user is executing the first script (could be with
/usr/bin/script.sh
,with./script.sh
,or it could be with
../Downloads/repo/scr/script.sh
)
使用dirname“$0”将允许您跟踪原始路径.
- The script
script.sh
will be changing to a different directory before callinghelper.sh
.
同样,由于你有$0的路径,你可以回到它.