Mac 上的复制到 Google 云端硬盘可以在 shell 脚本中使用,但不能在 cron 或 launchctl 作业中使用

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

我正在尝试在 Mac 上设置一个夜间任务来编辑文件,然后将该文件复制到我的 Google 云端硬盘,该文件可通过 Google 桌面集成直接从我的 Mac 文件系统访问。我有一个简单的 bash 脚本来测试它,该脚本在终端中执行时可以正常工作,但当我尝试将脚本添加到 cron 或通过 launchctl 执行时会失败。示例脚本是:

#!/bin/bash

echo "test data" > /Users/<user>/Scripts/Scratch/testfile.txt

cp /Users/<user>/Scripts/Scratch/testfile.txt /Users/<user>/Google*/My*/copied.txt

exit 0
上面的

”替换为我在脚本中的实际用户名。我怀疑 Google 驱动器目录中的空格可能是问题所在。这就是为什么我在目录路径中使用“*”。我还尝试转义空格,如下面的代码片段所示,但这在 cron 或 launchctl 中也不起作用。

cp /Users/<user>/Scripts/Scratch/testfile.txt /Users/<user>/Google\ Drive/My\ Drive/copied.txt

当我在终端中运行脚本时,转义空格版本也可以工作。我还尝试创建一个指向 Google 驱动器的链接(硬链接和符号链接),以避免脚本中出现空格或“*”解决方法,但这在 cron 或 launchctl 中也不起作用。当 cron 作业使用带有转义空格的脚本运行时,我得到的错误是这样的:

cp: /Users/<user>/Google Drive/My Drive/copied.txt: Operation not permitted

当我尝试使用“*”来避免路径中出现空格时(同样仅在 cron 中;在终端中工作正常),出现的错误是:

cp: /Users/<user>/Google*/My*/copied.txt: No such file or directory

很难解释为什么所有这些方法都在终端中起作用,但在 cron 或 launchctl 中不起作用,即使我到处都使用绝对路径。

MacBook Pro 2 GHz 四核 Intel Core i5,16 GB RAM,运行 Sonoma 14.5

附加信息

在 Apple 支持网站上看到解决方案后,我尝试给予 cron 完整磁盘访问权限,这实际上解决了 cron 的问题。但是,即使授予 launchd 和 launchctl 相同的完全磁盘访问权限后,launchd 的问题仍然存在。

bash cron google-drive-api space launchctl
1个回答
0
投票

尝试按照此处所述提供完整磁盘访问权限,但对于 /bin/bash

我为我的案例做了 /bin/zsh ,现在似乎可以工作了。

我想知道给予命令行完整的磁盘访问权限是否是一个安全问题?

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