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

Bash 通过“抛出”执行的回退命令;没有这样的文件或目录;,bash,macos,shell,sh,plist,Bash,Macos,Shell,Sh,Plist,我正试图在Mac上使用PlistBuddy执行更新或插入 脚本 我编写了以下脚本: #/垃圾箱/垃圾箱 set-e PLIST\u LOCATION=“Info.PLIST” ENVIRONMENT=“DEV” /usr/libexec/PlistBuddy$PLIST|u位置-c“Set:MyEnvironment string$ENVIRONMENT”|\ /usr/libexec/PlistBuddy$PLIST_位置-c“添加:MyEnvironment字符串$ENVIRONMENT”

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

脚本

我编写了以下脚本:

#/垃圾箱/垃圾箱
set-e
PLIST\u LOCATION=“Info.PLIST”
ENVIRONMENT=“DEV”
/usr/libexec/PlistBuddy$PLIST|u位置-c“Set:MyEnvironment string$ENVIRONMENT”|\
/usr/libexec/PlistBuddy$PLIST_位置-c“添加:MyEnvironment字符串$ENVIRONMENT”
测试

我想确保,如果第二个命令失败,我的脚本将失败,因此我将其更改为,仅用于测试

/usr/libexec/PlistBuddy$PLIST|u LOCATION-c“Set:TKEnvironment string$ENVIRONMENT”|\
/usr/libexec/PlistBuddy$PLIST_LOCATION-c“删除:TKEnvironment字符串$ENVIRONMENT”
而不是

Set:Entry“:MyEnvironment”不存在
删除:条目“:MyEnvironment”不存在
命令失败

Set:Entry“:MyEnvironment”不存在
./env.sh:第6行:/usr/libexec/PlistBuddy:没有这样的文件或目录
问题


为什么它会执行第一个命令,但随后失败,因为它找不到该命令?

如果查看错误行

./env.sh: line 6:  /usr/libexec/PlistBuddy: No such file or directory
您将看到冒号和命令路径的第一个
/
之间有一个额外的空格。这表明shell从某处拾取了一个散乱的字符,并且试图运行一个前面有空格(或其他一些空白字符)的命令

如果您运行的是Windows,我会怀疑一个回车符潜入了文件中,并且与
\
行继续符的交互不好。在macOS下,我猜通常的Unix换行已经被旧的macOS回车替换了。我相信在这一点上会有一些有用的编辑加入进来

无论如何,我建议删除
\
并尝试一条长线。如果这样做有效的话,就意味着行尾问题


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

如果查看错误行

./env.sh: line 6:  /usr/libexec/PlistBuddy: No such file or directory
您将看到冒号和命令路径的第一个
/
之间有一个额外的空格。这表明shell从某处拾取了一个散乱的字符,并且试图运行一个前面有空格(或其他一些空白字符)的命令

如果您运行的是Windows,我会怀疑一个回车符潜入了文件中,并且与
\
行继续符的交互不好。在macOS下,我猜通常的Unix换行已经被旧的macOS回车替换了。我相信在这一点上会有一些有用的编辑加入进来

无论如何,我建议删除
\
并尝试一条长线。如果这样做有效的话,就意味着行尾问题


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

不需要反斜杠。命令不能以
|
运算符结尾,因此shell将继续从下一行读取输入。谢谢。我只是删除了空格并再次键入,错误就消失了。我认为这是由于将脚本从windows虚拟机复制到我的Mac上造成的。我想你的假设是对的,反斜杠是没有必要的。命令不能以
|
运算符结尾,因此shell将继续从下一行读取输入。谢谢。我只是删除了空格并再次键入,错误就消失了。我认为这是由于将脚本从windows虚拟机复制到我的Mac上造成的。我想你的假设是对的。