我想从 shell 脚本运行一个命令,该命令带有与 shell 脚本放在同一目录中的参数。
例子:
my_installer.sh:
#!/bin/sh
sudo dpkg -i --someflags=abcd blah.deb
我怎么知道在my_installer.sh
哪里blah.deb
?
我已经尝试./blah.deb
并查看了一些环境变量...我收到有关未找到文件的错误。
我假设用户会双击该脚本,或者从主页运行它 - 而不是 cd 到脚本位置。
答案1
根据问题:(a) 脚本与 位于同一目录中blah.deb
,并且 (2) 用户将从某个未知的其他目录运行该脚本。在这种情况下:
#!/bin/bash
sudo dpkg -i --someflags=abcd "${BASH_SOURCE[0]%/*}/blah.deb"
shebang 行已升级,bash
以便我们可以使用数组BASH_SOURCE
来告诉我们正在执行的脚本的位置。
因为这避免了命令替换,所以即使在目录名称以换行符结尾的异常情况下它也应该有效。
答案2
您可以先使用 cd 命令进入脚本位置
cd "$(dirname $0)"
或使用
sudo dpkg -i --someflags=abcd "$(dirname $0)"/blah.deb
当 /bin/sh 为 dash 而不是 bash 时,此方法也有效。