如何运行与脚本位于同一目录中的文件参数的 shell 脚本?

如何运行与脚本位于同一目录中的文件参数的 shell 脚本?

我想从 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 时,此方法也有效。

相关内容