我一直想问这个问题,但不想冒着声誉受损的风险,但现在我真的需要一些直接的输入。我是一个 Linux 新手,正在使用 Raspberry Pi 搭建 LAMP 服务器,并喜欢创建所有安装命令的 shell 文件,但我也喜欢保持模块化,例如:
#!/bin/sh
#LAMPinstall.sh
./apacheinstall.sh
./mysqlinstall.sh
./phpinstall.sh
我习惯于编写环境中这样的调用非常简单,但是这个脚本的明显问题是它需要在调用时当前工作目录为脚本所在的目录。
我进行了大量关于绝对路径与相对路径、源码引用与调用、bash与shell以及引用脚本路径等Linux特定内容方面的阅读,试图找到一个解决超出当前工作目录相对路径调用的方法,但是最终并没有取得满意的解决方案,或许永远也不会。目前,我使用存储在变量中的绝对路径,例如:
#!/bin/sh
#LAMPinstall.sh
thisdir=/path/to/scripts
${thisdir}/apacheinstall.sh
${thisdir}/mysqlinstall.sh
${thisdir}/phpinstall.sh
即使每次路径改变都需要修改脚本,但我仍需使用这种方式来调用shell脚本。所以我的问题更多是一个最佳实践的问题,而不是请求解决特定问题的方案(尽管它是一个具体问题),以下问题需一起考虑,而不是像我所读到的每个单独的文章和问题:
- 使用我目前的方式组织调用shell脚本是不是一个坏主意?
- 使用类似于
$(dirname "$0")
这样的内容引用一个脚本的路径是不是一个坏主意?如果是,那么你如何维护多个shell文件的组织结构? - 在考虑问题#2时,是否重要考虑他人可能对脚本的所有可能用法(例如:是否存在子目录并被源码引用)?还是说只需说“只能调用此脚本,如果有人滥用则由他们自负”。对不起,我表达得不够好。
如果这是一个幼稚的问题,请见谅,我只是想听听您的意见。