V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
klgd
V2EX  ›  Apple

请教, AppleScript 脚本,实现创建 Automator 应用

  •  
  •   klgd · 185 天前 · 787 次点击
    这是一个创建于 185 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚入手的 mac ,纯小白

    先说目的:需要用 chrome 多开
    搜索一番,可以用 shell 脚本 open chrome ,也可以用 Automator 创建一个 run shell 应用(有点儿像 win 里的快捷方式?) shell 脚本作为最后的选择,想先试着学学 Automator ,因为要创建多个,又太想一个一个手动去 Automator 创建,搜索后了解 可以用 AppleScript 来实现批量创建,但是 gpt 给的脚本有误,请教大家,这个 AppleScript 脚本该如何实现

    以下 2 个 script 执行都会报语法错误:
    预期是行的结尾等等,却找到“{”。
    预期是行的结尾等等,却找到标识符。

    set appPath to (path to desktop as text) & "OpenChromiumWithDataDir.app"
    set chromiumPath to "/Applications/Chromium.app/Contents/MacOS/Chromium"
    set userDataDir to "/Users/admin/Library/Chromium/Data/1"
    set shellScript to chromiumPath & " --user-data-dir=" & userDataDir
    
    tell application "Automator"
        activate
        set newApp to make new document
        set type of newApp to application
        set name of newApp to "Open Chromium with Custom Data Dir"
        tell newApp
            set newAction to make new "Run Shell Script" at end of actions with properties {name:"Run Shell Script", script:shellScript}
        end tell
        save newApp in appPath with properties {name:"Open Chromium with Custom Data Dir.app"}
    end tell
    
    tell application "Automator"
        set newWorkflow to make new workflow with properties {name:"Launch Chromium with Profile 1"}
        delay 1
        set newLibrary to expose library of newWorkflow
        set newShell to make new action of class "Run Shell Script" with properties {name:"Launch Chromium with Profile 1"}
        set contents of newShell to "/Applications/Chromium.app/Contents/MacOS/Chromium --user-data-dir=/Users/admin/Library/Chromium/Data/1"
        tell newLibrary to add action newShell after action 0
        set newApplication to (path to desktop as text) & "Launch Chromium with Profile 1.app"
        save newWorkflow in file newApplication
    end tell
    
    第 1 条附言  ·  179 天前

    找到了一个简便的方法,大致思路是这样的:

    1、先制作一个template.app:
    cp Chromium.app template.app
    删除template.app中的chromium框架(因为文件太大了)
    template.app/Contents/MacOS/Chromium内容换成

    #!/bin/bash
    
    CHROMIUM_APP="/Applications/Chromium.app/Contents/MacOS/Chromium"
    USER_DATA_DIR="/Users/admin/Library/Chromium/Data"
    USER_CACHE_DIR="/Users/admin/Library/Chromium/Cache"
    
    NEW_APP_NAME="USER_NAME" #这里的后面会被替换
    NEW_APP_CACHE_PATH="$USER_CACHE_DIR/$NEW_APP_NAME"
    NEW_APP_DATA_PATH="$USER_DATA_DIR/$NEW_APP_NAME"
    
    $CHROMIUM_APP --disk-cache-dir=$NEW_APP_CACHE_PATH \
        --user-data-dir=$NEW_APP_DATA_PATH
    

    2、接着写一个批量生成的shell:

    #!/bin/bash
    # 定义要创建的应用程序数量
    NUM_APPS=10
    
    # 定义原始应用程序路径
    ORIGINAL_APP="/Users/admin/Desktop/template.app"
    SHORTCUT_DIR="/Users/admin/Desktop/Chrome"
    
    # 循环创建新的应用程序副本
    for i in $(seq 1 $NUM_APPS); do
      # 定义新应用程序的名称
      NEW_APP_NAME="User$(printf "%03d" $i)"
      NEW_APP_PATH="$SHORTCUT_DIR/$NEW_APP_NAME.app"
    
      rm -rf $NEW_APP_PATH
      # 复制应用程序
      cp -R "$ORIGINAL_APP" "$NEW_APP_PATH"
      
      # 检查复制是否成功
      if [ $? -ne 0 ]; then
        echo "Failed to copy $ORIGINAL_APP to $NEW_APP_PATH"
        exit 1
      fi
    
      # 替换文件中的关键字
      sed -i "" "s/USER_NAME/$NEW_APP_NAME/g" "$NEW_APP_PATH"/Contents/MacOS/Chromium
    
      echo "Created $NEW_APP_NAME with user directory"
    done
    

    目前生成的app使用正常,暂时不知道是否有什么隐患或影响

    2 条回复    2024-05-24 10:39:21 +08:00
    ihwbunny
        1
    ihwbunny  
       184 天前
    只看了第一个,你把“ with properties {name:"Open Chromium with Custom Data Dir.app"}”删了,就变清澈了。但是其实还是运行不成功。

    shell 最简单, 比如下面,以后只要是把 localProfile 变量改一下,另存为一个新的脚本或者.command 文件。
    如果稍微复杂点,用 shell 创建多个 open chromium 的脚本也是很容易,比如就是一个循环 for i in {1..10} 就可以帮你创建 10 个可运行脚本
    用 AppleScript 创建,其实是一样的,不过它的语法更啰嗦。你上面的两个都没有涉及到创建多个的问题。

    #!/bin/bash
    localProfile="/Users/admin/Library/Chromium/Data/1"
    mkdir -p "$localProfile"
    /Applications/Chromium.app/Contents/MacOS/Chromium --user-data-dir="$localProfile"
    klgd
        2
    klgd  
    OP
       184 天前
    @ihwbunny #1 是的 shell 是最简单的了,只是看到 applescript 这个东西了,就想多了解了解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 13:43 · PVG 21:43 · LAX 05:43 · JFK 08:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.