目前,我正在使用一个 shell 脚本并制作一个系统,我在其中编写一个 shell 脚本,main.sh
并且在同一个目录中有一个包含其他 shell 脚本的目录。结构是:
root_directory
|___scripts
| |___script1.sh
| |___script2.sh
| |___script3.sh
|
|___main.sh
现在main.sh
是基本文件。在此,main.sh
我将脚本称为
bash ./scripts/script1.sh
bash ./scripts/script2.sh
等等。
当我main.sh
从root_directory
目录运行文件时,一切正常。但是我想全局安装整个系统,因为我可以main.sh
从任何地方运行文件并且它可以找到scripts
子文件夹。
如果有任何疑问,请随时发表评论。
您可以通过运行获取脚本文件的目录
echo "${0%/*}" # or
dirname "$0"
在脚本中,所以只需将行更改为
bash "${0%/*}/scripts/script1.sh" # or respectively
bash "$(dirname "$0")/scripts/script1.sh"
或定义一个变量,例如
script_dir="${0%/*}/scripts" # or respectively
script_dir="$(dirname "$0")/scripts"
并将其用于路径:
bash "$script_dir"/script1.sh
在脚本中,$0
根据您的调用方式,以绝对或相对形式保存脚本文件的路径。dirname
只是提取目录名称,这是root_directory
您的情况的路径。使用bash
Parameter Expansion可以做同样的事情:${0%/*}
简单地删除最后一个斜杠中的所有内容/
,即文件名。对于这两种方式,路径仍然是绝对路径或相对路径。
我在通过符号链接执行时dirname
在获取当前脚本的路径上找到了解决方案• U&L,如果您觉得这个答案有用,请为这个答案点赞(也;)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句