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

时间:2018-07-18 12:03:59

标签: bash macos shell sh plist

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

脚本

我写了以下脚本:

npm run

测试

我想确保如果第二个命令失败,我的脚本也会失败,所以我将其仅用于测试更改为:

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

问题

为什么它执行第一个命令却又失败了,因为找不到命令?

1 个答案:

答案 0 :(得分:3)

如果您看到错误行

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

您将看到冒号和命令路径的第一个/之间有多余的空格。这表明外壳程序正在从某个地方拾取一个流浪字符,并且外壳程序试图运行前面带有空格(或其他空格字符)的命令。

如果您运行的是Windows,我怀疑回车符已经潜入文件中,并且与\行继续之间的交互不良。在macOS下,我猜想通常的Unix换行已被旧的macOS回车代替。我确定此时会有一些有用的编辑器...

无论如何,我建议删除\并尝试排长一行。如果可行,则表明行尾有问题。

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