通过 || 回退命令抛出 "No such file or directory"

fallback command via || throws "No such file or directory"

我正在尝试使用 PlistBuddy 在我的 Mac 上执行更新或插入。

脚本

我编写了以下脚本:

#!/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"

测试

我想确保,如果第二个命令失败,我的脚本也会失败,所以我将它 just for test 更改为:

/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

问题

为什么执行了第一个命令,然后就失败了,因为找不到命令?

如果你看错误行

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

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

如果你是 运行宁 Windows,我怀疑回车-return 字符已经潜入文件并与 \ 交互不良线路延续。在 macOS 下,我猜通常的 Unix 换行符已被旧 macOS 的回车符所取代 return。我相信一些有用的编辑会在此时加入...

无论如何,我建议删除 \ 并尝试使用长行。如果可行,则表明存在行尾问题。

此外,请检查您的编辑器以确保它使用合理的行结尾。