调用主脚本相关目录中的脚本

调用主脚本相关目录中的脚本

目前,我正在使用一个 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.shroot_directorymain.shscripts

如果有任何疑问,请随时发表评论。

答案1

您可以通过运行获取脚本文件的目录

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参数扩展:${0%/*}只是删除最后一个斜杠/(即文件名)的所有内容。无论使用哪种方式,路径都是绝对路径或相对路径。

我找到了dirname解决方案通过符号链接执行时获取当前脚本的路径 • U&L,如果您发现这个答案有用,请(也)点赞这个答案。

答案2

我通常不会在这个平台上回答问题,所以如果我冒犯了任何人,请纠正我。

如果我正确理解了你的问题,你想main.sh在终端上调用 bash 文件时全局运行。

  • 第一步检查该名称是否main已被我的操作系统中的任何其他程序使用。运行~$ which <file name>(在你的情况下指的是 main),如果没有找到结果,则意味着该标识符可以自由使用
  • 第二步打开 bash 文件并在顶部添加 shebang,#!/bin/bash这是我最常用的。保存文件并退出
  • 第三,将 bash 文件移动到,/usr/bin否则/usr/local/bin这将需要 root 访问权限。
  • 第四,通过运行此命令将 bash 文件设置为可执行文件,chmod +x <file-name>这将允许任何用户运行该特定脚本。如果你想限制谁有访问权限,请使用此命令chmod u+x <file-name>

之后,你可以在任何地方运行这个 bash 文件。下面是一个不错的资源

相关内容