2016-08-16 114 views
15

我在同一个文件夹(由用户的地方保存谁下载整个仓库)两大Bash脚本:运行在同一个目录中的脚本作为当前脚本

  • script.sh被用户运行
  • helper.sh需要和script.sh

运行这两个脚本应该是在同一目录下。我需要的第一个脚本调用第二个,但有两个问题:

  1. 知道当前的工作目录是没用的,我的,因为我不知道用户是如何执行的第一个脚本做(可能是与/usr/bin/script.sh,与./script.sh,或它可能与../Downloads/repo/scr/script.sh
  2. 在调用helper.sh之前,脚本script.sh将更改为不同的目录。

我可以肯定地砍击在一起,通过在变量存储the current directory做到这一点,但代码似乎为我想象是一种很常见和简单的任务不必要的复杂。

是否有一个标准的方式来可靠请致电helper.shscript.sh?并将在任何Bash支持的操作系统中工作?

回答

22

由于$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 

所以

  1. 了解当前的工作目录是没用的,我的,因为我不知道用户是如何执行的第一个脚本(可能是与 /usr/bin/script.sh,与./script.sh,或者它可能是与 ../Downloads/repo/scr/script.sh

使用dirname "$0"将允许您跟踪原始路径。

  • 脚本script.sh将调用helper.sh之前改变到不同的目录。
  • 再次,因为你必须在$0路径可以cd回去吧。

    相关问题