【问题标题】:Terminal program: unable to find the directory/file though they are in the correct pathway终端程序:尽管它们位于正确的路径中,但无法找到目录/文件
【发布时间】:2018-06-23 01:25:55
【问题描述】:

还有什么问题?抱歉,我对编程很陌生,所以我不确定这是否是我提出问题的正确方法。

这是终端文件中的代码:

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是什么?
  • 不要发布文字截图。只需复制文本并将其(作为代码)粘贴到您的问题中即可。

标签: shell version-control diff patch


【解决方案1】:

你的脚本是这样说的:

PLACE=`dirname $0`

首先,shell 执行参数扩展。这意味着(在这种情况下)它扩展了$0。变量$0 扩展为shell 用来执行脚本的路径,因此该行扩展为:

PLACE=`dirname /Users/ShakeyBanks/Desktop/Perfect Heart CE./DS_Rom_Patcher/Rom_Patcher`

请注意,扩展中没有反斜杠!在启动脚本之前,您的交互式 shell 会使用反斜杠。

然后shell 执行命令替换:它执行`...` 中包含的命令。 shell 将命令拆分为空格,因此该命令包含四个单词。第一个词是要运行的程序,其余三个词是该命令的参数:

  1. dirname
  2. /Users/ShakeyBanks/Desktop/Perfect
  3. Heart
  4. CE./DS_Rom_Patcher/Rom_Patcher

这里的问题是 dirname 程序只需要 一个 参数,但您传递了三个参数。它检测到这一点并因错误而失败:

usage: dirname path

要解决此问题,请用双引号引用 $0,如下所示:

PLACE=`dirname "$0"`

您还需要用双引号引用$PLACE${PLACE}$ROM$PATCH$NAME 的所有后续使用,因为它们会遇到相同的问题。

,将目录重命名为不包含空格。

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多