目前,我正在使用一个 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
如果有任何疑问,请随时发表评论。
答案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 文件。下面是一个不错的资源