AppleScript won';t按终端中的方式运行shell脚本

AppleScript won';t按终端中的方式运行shell脚本,applescript,Applescript,我有一个.sh脚本,如果我在终端中使用“/Volumes/MEDIA/SERVER/SYNC.sh”运行它,它可以正常工作 但我无法使用以下命令在AppleScript编辑器中运行相同的命令: 执行shell脚本“/Volumes/MEDIA/SERVER/SYNC.sh” 还尝试了前面的bash和sh shell脚本(SYNC.sh) 他跑了。脚本在终端上运行,仅在同步完成后出现 谢谢你的帮助 您自己安装了lftp吗?我手边没有Mac电脑来检查默认情况下它是否在MacOSX中。如果您安装了它,

我有一个.sh脚本,如果我在终端中使用“/Volumes/MEDIA/SERVER/SYNC.sh”运行它,它可以正常工作 但我无法使用以下命令在AppleScript编辑器中运行相同的命令: 执行shell脚本“/Volumes/MEDIA/SERVER/SYNC.sh” 还尝试了前面的bash和sh

shell脚本(SYNC.sh)

他跑了。脚本在终端上运行,仅在同步完成后出现


谢谢你的帮助

您自己安装了lftp吗?我手边没有Mac电脑来检查默认情况下它是否在MacOSX中。如果您安装了它,那么它可能不在AppleScript环境的路径中,并且bash脚本在从那里运行时找不到它

如果是这种情况,则您必须:

  • 完全限定“lftp”的路径(例如,“/usr/local/bin/lftp”或它实际所在的位置) 或
  • 附加到AppleScript(或bash脚本早期)使用的PATH环境变量
  • 我想我会选择选项1。选择2是过度杀伤力,在其他时间更可能对其他事情产生不利影响


    另外,如果您不知道“lftp”安装在哪里,请在终端中键入“哪个lftp”。

    在脚本开头,这真的是您的用户名、密码和主机吗?:-)您如何知道“mv”线路没有运行?或者是“rm”线等等?我真是太蠢了我不知道,但lftp的同步也不是。如果我在终端中运行它,它会立即拾取任何新文件。好的,这更有意义('mv'和'rm'如果运行成功,可能不会提供任何输出)。尝试完全限定“lftp”(根据我的回答)。我必须自己安装lftp。你的想法很有道理。所以我用它的完整路径替换了lftp,解决了我的问题,谢谢!我没有代表投票支持你的评论,一旦我有足够的代表,我会为你点击向上箭头。
    #!/bin/bash
    login="uhh"
    pass="uhh"
    host="uhh.com"
    remote_dir='~/private/sync'
    local_dir="/Volumes/MEDIA/_/SYNCING"
    
    base_name="$(basename "$0")"
    lock_file="/tmp/$base_name.lock"
    trap "rm -f $lock_file" SIGINT SIGTERM
    if [ -e "$lock_file" ]
    then
        echo "$base_name is running already."
        exit
    else
        touch "$lock_file"
        lftp -p 22 -u "$login","$pass" sftp://"$host" << EOF
        set sftp:auto-confirm yes
        set mirror:use-pget-n 5
        mirror -c -P5 --Remove-source-files --log="/Volumes/MEDIA/SERVER/LOGS/$base_name.log" "$remote_dir" "$local_dir"
        quit
    EOF
        # MOVE FINISHED FILES INTO DIRECTORY FOR CONVERSION
        mv /Volumes/MEDIA/_/SYNCING/movies/* /Volumes/MEDIA/SEEDBOX/MOVIES
        mv /Volumes/MEDIA/_/SYNCING/tvshows/* /Volumes/MEDIA/SEEDBOX/TVSHOWS
        mv /Volumes/MEDIA/_/SYNCING/books/* /Volumes/MEDIA/SEEDBOX/BOOKS
        mv /Volumes/MEDIA/_/SYNCING/music/* /Volumes/MEDIA/SEEDBOX/MOVIES
    
        # SHOW COMPLETED NOTIFICIATION 
        osascript -e 'display notification "Sync completed" with title "SEEDB0X"'
    
        rm -f "$lock_file"
        trap - SIGINT SIGTERM
        exit
    fi
    
    osascript -e 'display notification "Sync completed" with title "SEEDB0X"'