0

我是 applescript 的完全新手,我的新外部备份硬盘使我有必要使用它。由于它非常嘈杂,我想编写一个脚本来安装磁盘(如果它已卸载),运行备份然后再次弹出备份磁盘(代码 A)。到目前为止,一切都很好。为了在备份完成后弹出磁盘,我找到了一段代码来检查进程是否仍在运行(代码 B)。如果备份进程 (backupd) 仍然存在,则返回 1,如果完成,则返回 0。
我现在正在努力将这两部分结合起来。我希望代码 B 在备份开始后继续检查 backupd 是否仍在运行,如果完成,请转到下一步并弹出磁盘。

我只是无法让代码 B 在代码 A 中运行,而且所需的循环也让我有点困惑。非常感谢任何帮助!我无法想象这对我的想象力来说太棘手了感谢您帮助我恢复和平与宁静

代码 A:

set myVolumeLabel to "Time Machine"

tell application "Finder"
    set diskDev to do shell script "diskutil list | grep \"" & myVolumeLabel & "\" | grep -o > 'disk[0-9]*' "
    if not (disk myVolumeLabel exists) then
        
        do shell script "diskutil mountDisk " & diskDev
        do shell script "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-> helper >/dev/null 2>&1 &"
        
        (* Checking if the backupd process is still running should go here I suppose.*)
    else
        do shell script "diskutil eject /Volumes/'Time Machine' " & diskDev
    end if
    
end tell

代码 B

on check_process(marker)
    set the_processes to (do shell script "ps -A")
    return (the_processes contains marker)
end check_process

if check_process("/backupd") then
    set x to "1"
else
    set x to "0"
end if

---display dialog x buttons {"OK"} default button 1   
    

Mac OS X (10.6.8)

4

1 回答 1

0

在我看来,你想做的是相当低级的“系统东西”,更多的代码应该在 shell 中完成。

我正在学习 AppleScript 和 Unix shell 脚本(准确地说是 bash shell,它是 OS X 中的默认 shell)。

这里的大部分 AppleScript 实际上主要是 AppleScript 中的 shell 脚本。

在这种情况下,正确工作的正确工具似乎是 shell 脚本。

你现在可能不想学习一门完整的“另一种编程语言”,所以我会给你一些想法。

如果你用引号内的 & 符号结束 shell 命令,那么 AppleScript 不会等待 shell 脚本完成,而是会立即返回,将进程放在单独的线程上,并返回一个进程 ID .

如果您不使用 & 符号终止 shell 命令,则 AppleScript 将等待命令完成后再继续。

你可以试试下面的实验。在 Terminal.app 中输入以下命令:

睡觉 10

您需要 10 秒才能重新控制终端。

如果键入以下命令,

睡10&

您将立即获得控制权,并将获得一个进程 ID 以引用您已启动的进程。

好吧,再一次,在我看来,整个脚本最好写成 bash 脚本,可能使用一点 Automator 或 AppleScript 来启动。

Mac shell(bash)教程:
http ://tidbits.com/article/7003

-- Kaydell 让我做你的向导

于 2013-06-28T14:29:06.620 回答