![Cron 作业和剪贴板](https://linux22.com/image/1258722/Cron%20%E4%BD%9C%E4%B8%9A%E5%92%8C%E5%89%AA%E8%B4%B4%E6%9D%BF.png)
当我从 cron 作业运行 Pbpaste 时,它似乎没有按预期工作。
我有一个 applescript,可以在预览中打开 PDF 文件并向其发送复制命令,然后关闭预览。接下来我想将其粘贴到文件中,pbpaste > pasta.txt。当我以自己的身份运行它时,一切都运行良好。
但是,如果我将其作为 crontab -e 中的任务,它确实可以正确运行,甚至创建输出文件,但内容为空。就好像运行所处的上下文对剪贴板有不同的概念。
我的 crontab 是这样的:
* * * * * cd /Users/bemmu/Public;osascript yeah.script
是的,脚本是这样的:
do shell script "open tiliote.pdf"
delay 2
tell application "Preview"
activate
delay 2
tell application "System Events" to keystroke "a" using {command down}
delay 2
tell application "System Events" to keystroke "c" using {command down}
delay 2
tell application "System Events" to keystroke "q" using {command down}
delay 2
end tell
do shell script "pbpaste > pasta.txt"
预期结果是 pasta.txt 将包含文本形式的 PDF 文件,如果我手动运行此脚本,就会发生这种情况。但是,如果 cron 运行它,pasta.txt 会被创建但不会包含任何内容(大小为 0)。
我可以看到,从 cron 运行时复制肯定成功,因为我稍后可以自己粘贴。只是 pbpaste 似乎无法从 cron 运行。
答案1
为什么不抛弃脚本并使用 Automator 工作流程(或编译的应用程序),因为他们有专门的方法将 PDF 中的文本提取到文本文件中。
您还可以尝试放弃 Cron 并通过 LaunchAgent 运行脚本。示例:
〜/图书馆/ LaunchAgents / us.peelman.Terminal.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>us.peelman.TerminalLauncher</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal</string>
</array>
</dict>
</plist>