gpt4 book ai didi

shell - 如何在 AppleScript 中抑制/自动关闭错误对话框

转载 作者:行者123 更新时间:2023-12-01 09:57:35 46 4
gpt4 key购买 nike

我有后台进程作为登录用户运行,经常尝试挂载 AFP 共享以备份一些数据。如果无法安装共享,则应该忽略它。

在我的脚本(实际上是 bash)中,我通过 AppleScript mount volume 安装共享片段。与 mount 相比或 mount_afp命令,这似乎是使用来自 Kerberos 票证或用户钥匙串(keychain)的凭据在相应服务器上自动对用户进行身份验证的唯一方法。特别是,我做不是 希望必须在脚本中存储密码:

try
mount volume "afp://server/share"
on error errText number errNum
log {errText, errNum}
end try

这通常可以正常工作,但尽管 try ... on error block ,“挂载卷”命令总是在出现错误时打开一个对话框:

enter image description here

我在寻找 :
  • 一种抑制此对话框的方法,或
  • 自动关闭它的解决方案(可能涉及一些 SystemEvents 诡计?),或
  • 一种教学方法mount ,分别mount_afp使用来自 Kerberos 票证和用户钥匙串(keychain)的凭据,而无需提供密码。

  • 我已经用谷歌搜索并尝试了几个小时,但还没有找到任何解决方案。

    最佳答案

    我已经在我的 mac mini 媒体服务器上解决这个问题很久了,相信我终于找到了解决方案。

    我把它分成两个脚本:

    第一个在空闲时运行(而不是重复循环)并每 10 秒调用第二个脚本来处理驱动器安装。

    --------------------------------------------------------------------------------------
    --"On Idle Launch Basic Drive Mounter.app"

    on idle
    try
    --script loads on startup, so first we wait 5 seconds to ensure network
    delay 5
    --run the mounter script which is on the desktop
    run script file ":Users:localusername:Desktop:Basic Drive Mounter.app"

    on error errStr number errorNumber
    --listen for the apple quit command and quit
    if the errorNumber is equal to -128 then
    quit
    return 1
    --listen for the unknown error and ignore it
    else if the errorNumber is equal to -5014 then
    return 5
    else
    --all other errors are also ignored
    return 5
    end if
    end try
    --return with a wait of 5 seconds before next idle run
    return 5

    end idle
    --------------------------------------------------------------------------------------

    第二个脚本检查网络,然后尝试使用 shell 安装卷
    山。我最初使用查找器“安装卷”并且代码也作为注释存在,但我不喜欢弹出错误对话框;即使只有一秒钟,所以我继续使用 shell 脚本。
    --------------------------------------------------------------------------------------
    --"Basic Drive Mounter.app"
    try
    set IP_address to "xxx.xxx.xxx.xxx"

    set IP_Valid to true

    try
    do shell script ("ping -c 2 " & IP_address)
    on error
    set IP_Valid to false
    end try

    if IP_Valid then
    tell application "Finder"
    if disk "work" exists then
    else
    -->>shell script version
    try
    do shell script "mkdir /Volumes/work"
    end try
    do shell script "mount_afp afp://xxx.xxx.xxx.xxx/work /Volumes/work/"
    --<<shell script version
    -->>finder mount volume version
    --with timeout of 1 second
    -- mount volume "afp://xxx.xxx.xxx.xxx/work"
    --end timeout
    --<<finder mount volume version
    end if
    end tell
    end if
    on error
    -->>finder mount volume version
    --on error finder returns an error dialog which needs to be closed to go back and retry
    --tell application "System Events"
    -- keystroke return
    --end tell
    --<<finder mount volume version
    return 0
    end try
    --------------------------------------------------------------------------------------

    并非所有这些都是我自己的代码,非常感谢applescript社区和谷歌 - 记得转发

    关于shell - 如何在 AppleScript 中抑制/自动关闭错误对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22640297/

    46 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com