我正在尝试让 Apple 脚本触发 shell 脚本:
do shell script "bash /Users/andrew/script.sh"
但我收到错误:“bash:/Users/andrew/script.sh:没有这样的文件或目录”
我尝试了许多故障排除步骤,包括当我将文件拖到终端并单击 Enter 时确认脚本运行。为了消除任何 shell 脚本问题,我对 shell 脚本中的所有行进行了注释。
在脚本编辑器中:
read "/Users/andrew/script.sh"
在结果窗口中正确读取 shell 脚本的内容作为文本。这似乎是一个权限问题,但不知道如何操作来修复它。我什至在不同的配置文件上尝试过该脚本。任何帮助将不胜感激
shell 脚本是(正如所述注释是有目的的,它确实可以在终端内工作):
#!/bin/bash
#diskutil umount /Volumes/Andrew’s\ MacBook\ Pro\ Time\ Machine
#sudo tmutil addexclusion -v /Volumes/iTunes\ Library
#sudo tmutil addexclusion /Users/Valerie
#sudo tmutil addexclusion /Users/Theodore
#sudo tmutil addexclusion /Users/ReaganBlomquist
#diskutil mount /Volumes/MacBook\ Time\ Machine
#tmutil startbackup
根据评论发布脚本:
中的“bash”do shell script "bash /users/...
之所以存在,是因为该脚本是 bash 脚本,并且 macOS 中的默认 shell 是 zsh。我非常确定该脚本与 shell 类型无关,但由于我的 shebang 用于 bash,所以我在内部是一致的。
事实证明我原来的帖子太简洁了。我希望在我的帖子中更准确,而不是
path/to/script.sh
认为问题可能是由于 MacOS 沙箱造成的,而且脚本的实际位置很重要。
但是实际的脚本路径中有空格:
do shell script "bash /Users/Andrew/Do Not Backup iTunes Library.sh"
我认为该命令的工作方式是将引号中的所有内容传递到终端,但不包含引号。按照其编写方式,我需要指出引号中的块是路径名。这个命令其实很强大,可以直接写终端命令。
菲利普在评论中向我透露了这一点,他要求我输入
do shell script "ls -l /Users/andrew/Do Not Backup iTunes Library.sh"
,其中透露了附加命令 not
backup
iTunes
和 Library
不是有效命令。
感谢所有评论者和菲利普,希望这能帮助其他人。