还有什么可能出问题?抱歉,我刚开始编程,所以不确定是否是解决问题的正确方法。
这是终端文件中的代码:
echo "Patcher Coded by _Retro_"
PLACE=`dirname $0`
ROM=`ls ${PLACE}/Rom/*.nds | head -n 1`
PATCH=`ls ${PLACE}/Patch/*.* | head -n 1`
NAME=${ROM%.[^.]*}
$PLACE/xdelta3 -dfs $ROM $PATCH $NAME-patched.nds
答案 0 :(得分:0)
您的脚本说:
PLACE=`dirname $0`
首先,shell执行参数扩展。这意味着(在这种情况下)它将展开$0
。变量$0
扩展到shell用于执行脚本的路径,因此该行扩展为:
PLACE=`dirname /Users/ShakeyBanks/Desktop/Perfect Heart CE./DS_Rom_Patcher/Rom_Patcher`
请注意,扩展中没有反斜杠!反斜杠在启动脚本之前已由您的交互式外壳程序使用。
然后,外壳程序执行命令替换:它执行`...`
中包含的命令。外壳程序将命令分割成空格,因此该命令包含四个单词。第一个单词是要运行的程序,其余三个单词是该命令的参数:
dirname
/Users/ShakeyBanks/Desktop/Perfect
Heart
CE./DS_Rom_Patcher/Rom_Patcher
这里的问题是dirname
程序只需要一个自变量,但是您要传递三个。它检测到此错误并失败并显示错误:
usage: dirname path
要解决此问题,请用双引号引用$0
,如下所示:
PLACE=`dirname "$0"`
您还需要用双引号引用$PLACE
,${PLACE}
,$ROM
,$PATCH
和$NAME
的所有后续用法,因为它们会有同样的问题。
或,将目录重命名为不包含空格。