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