解压游戏,运行sh start.sh
结果为:
start.sh: 2: cd: can't cd to start.sh
./hoi4: error while loading shared libraries: libGLU.so.1: cannot open shared object file: No such file or directory
启动文件:
#!/bin/bash
GAMEDIR=$(cd "${0%/*}" && echo $PWD)
cd "$GAMEDIR"
export LC_ALL=C
exec ./hoi4 "$@"
预期该问题将被接受为特定错误问题。
答案1
您收到的特定错误是由于您尝试执行脚本的方式(以及脚本的编写方式相当奇怪)造成的。
当脚本运行时,位置参数0
包含调用脚本的名称,例如path/to/start.sh
- 或者简单地./start.sh
说,如果它是从当前目录调用的。参数扩展语法从匹配${0%/*}
中删除最短的后缀(分别)或只是,然后脚本尝试更改到此目录 - 换句话说,到父目录$0
/*
path/to
.
start.sh
但是,当您使用sh start.sh
(以及使用sh
而不是预期的执行脚本/bin/bash
) 时,$0
等于start.sh
。由于没有匹配的/
,因此${0%/*}
不会从 中删除任何内容$0
,导致脚本尝试执行命令cd start.sh
,该命令显然会失败,因为start.sh
它是文件而不是目录。
解决方案是按照作者预期的方式执行脚本 - 即确保它是可执行的
chmod +x start.sh
然后直接执行,例如
./start.sh