为什么shell脚本这么难开发?在 NodeJS 中,我可以简单地做:
require('./script')
Run Code Online (Sandbox Code Playgroud)
并且它总是需要script
相对于当前脚本。但是如果我在 shell/bash 中尝试:
./script.sh
Run Code Online (Sandbox Code Playgroud)
它将寻找相对于cwd
( pwd
) 的脚本。似乎点表示cwd
( pwd
) 而不是我预期的当前脚本所在的目录。
line 8: ./script.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何执行相对于当前执行脚本所在目录的脚本?
我试过了
/bin/bash script.sh
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
/bin/bash: script.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)
然后我试过了
script.sh
Run Code Online (Sandbox Code Playgroud)
得到这个错误
line 8: script.sh: command not found
Run Code Online (Sandbox Code Playgroud)
只有以下解决方案工作正常,但问题是它不可读:
$("$(dirname "$(realpath "$0")")/script.sh")
Run Code Online (Sandbox Code Playgroud) 我使用的是 Ubuntu 服务器 14.04。在我进行修改/etc/init.d/gearman-job-server
并输入后:
# sudo service gearman-job-server restart
Run Code Online (Sandbox Code Playgroud)
它忽略我所做的修改。但随后我输入:
# /etc/init.d/gearman-job-server restart
Run Code Online (Sandbox Code Playgroud)
一切正常。Ubuntu 14.04 中的这些脚本现在是否缓存在某处?