在 Apple 脚本中执行 Shell 脚本会导致找不到文件

问题描述 投票:0回答:1

我正在尝试让 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,所以我在内部是一致的。

bash macos shell terminal applescript
1个回答
0
投票

事实证明我原来的帖子太简洁了。我希望在我的帖子中更准确,而不是

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
不是有效命令。

感谢所有评论者和菲利普,希望这能帮助其他人。

© www.soinside.com 2019 - 2024. All rights reserved.