代码之家  ›  专栏  ›  技术社区  ›  Sven-Michael Stübe

通过| |的回退命令抛出“没有这样的文件或目录”

  •  0
  • Sven-Michael Stübe  · 技术社区  · 6 年前

    我正试图在我的Mac上用plistbuddy执行更新或插入。

    脚本

    我写了以下脚本:

    #!/bin/sh
    set -e
    PLIST_LOCATION="Info.plist"
    ENVIRONMENT="DEV"
    /usr/libexec/PlistBuddy $PLIST_LOCATION -c "Set :MyEnvironment string $ENVIRONMENT" || \
    /usr/libexec/PlistBuddy $PLIST_LOCATION -c "Add :MyEnvironment string $ENVIRONMENT"
    

    测试

    我想确保,如果第二个命令失败,我的脚本就会失败,所以我修改了它 只是为了测试 致:

    /usr/libexec/PlistBuddy $PLIST_LOCATION -c "Set :TKEnvironment string $ENVIRONMENT" || \
    /usr/libexec/PlistBuddy $PLIST_LOCATION -c "Delete :TKEnvironment string $ENVIRONMENT"
    

    但不是

    Set: Entry, ":MyEnvironment", Does Not Exist
    Delete: Entry, ":MyEnvironment", Does Not Exist
    

    命令失败

    Set: Entry, ":MyEnvironment", Does Not Exist
    ./env.sh: line 6:  /usr/libexec/PlistBuddy: No such file or directory
    

    问题

    为什么它执行第一个命令,但由于找不到命令而失败?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Jon    6 年前

    如果你看错误线

    ./env.sh: line 6:  /usr/libexec/PlistBuddy: No such file or directory
    

    你会看到冒号和第一个冒号之间有一个额外的空格 / 命令的路径这表明shell正在从某个地方提取一个离群字符,并且shell正在尝试运行一个前面带有空格(或其他一些空白字符)的命令。

    如果你在运行Windows,我会怀疑一个回车字符已经潜入文件,并且与 \ 行继续。在macOS下,我猜通常的Unix linefeed已经被一个旧的macOS回车替换了我相信一些有用的编辑会在这一点上插手。。。

    无论如何,我建议把 \ 试着排一长队如果这有效的话,那就意味着行结束问题。

    另外,检查编辑器以确保它使用了合理的行尾。