Alfred
的WorkFlow
可以高度自定义,可以通过它的一些功能配合编写的脚本,来优化日常的工作流程。之前注册了VPS
玩,用来做代理和整一些服务端的小服务,发现每次登录都比较繁琐,就想到用Alfred
的WorkFlow
来简化。 刚好最近的ChatGPT
比较火,就用ChatGPT
试了下,发现还是挺有帮助的。
通过ChatGPT查询实现方式 提问:创建一个Alfred的WorkFlow, 用来打开iTerm2并且自动登录VPS,VPS的IP是xxx.xxx.xxx.xxx,端口是XXXX,登录时需要输入密码。
ChatGPT回答:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 我们需要使用AppleScript来实现这个功能。同时,为了自动输入密码,我们可以使用expect脚本。 请按照以下步骤操作: 1. 确保你已经安装了expect工具(如果没有安装,请使用Homebrew安装)。然后在终端中使用以下命令测试一下expect是否可用:`which expect` 如果成功安装了expect,该命令将返回类似于`/usr/local/bin/expect`的路径;否则,你需要先安装expect。 2. 打开Alfred的Workflows设置页面,点击左下角的“+”按钮,选择“Blank Workflow”新建一个workflow。 3. 点击右上方的“Triggers”选项卡,然后点击左侧的“+”按钮,选择“Hotkey”,设置一个快捷键触发此workflow。 4. 点击右上方的“Actions”选项卡,然后点击左侧的“+”按钮,选择“Run Script”。 5. 在“Language”选项中选择“/bin/bash”。 6. 将以下脚本粘贴到“Script”选项卡中,并替换IP地址和端口号: #!/bin/bash # 启动Iterm2应用 osascript -e 'tell application "iTerm2" to activate' # 使用expect自动输入密码 /usr/local/bin/expect <<EOD spawn ssh root@xxx.xxx.xxx.xxx -p xxxx expect "password:" send "your_password_here\r" interact EOD 注意将`your_password_here`替换为你VPS的root密码。 7. 点击右上角的“Save”按钮保存workflow。 现在,当你按下快捷键时,Alfred将自动打开Iterm2应用,并通过ssh登录到你的VPS的root账号。同时,expect脚本将自动输入密码并完成登录过程。
这个回答中的第三步有点问题,实际没有“Triggers”选项卡。我自己创建了一个WorkFlow并且把它的脚本复制了过去。但是照做后报错:execution error: 不能获得“application "iTerm2"”。 (-1728)
我继续提问:出现报错:execution error: 不能获得“application “iTerm2””。 (-1728), 有其它方式吗?
ChatGPT回答:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 如果你使用 `osascript` 命令时报错说“无法获得应用程序”,可能是因为该应用程序的名称不正确或您没有权限访问该应用程序。请确保应用程序的名字正确且你有足够的权限打开它。 如果你确定应用程序的名称正确且具有适当的权限,则可以尝试使用应用程序的 Bundle Identifier。Bundle Identifier 是唯一标识应用程序的字符串,可以通过以下方式找到: 1. 在 Finder 中,找到应用程序的 .app 文件。 2. 右键单击 .app 文件,选择“显示包内容”。 3. 在新打开的窗口中,找到 Contents 文件夹。 4. 找到 Info.plist 文件并用文本编辑器打开。 5. 找到 `<key>CFBundleIdentifier</key>` 标记,下面的字符串就是应用程序的 Bundle Identifier。 然后,你可以使用如下命令来启动应用程序: osascript -e 'tell application id "BUNDLE_IDENTIFIER" to activate' 将 `BUNDLE_IDENTIFIER` 替换为应用程序的 Bundle Identifier。 希望这能够解决你的问题,如果还有其他问题,请告诉我。
按操作把应用名改为BUNDLE_IDENTIFIER
后就可以正常工作了。但是这部分把密码硬编码在了脚本里面,不是太合适,就想到通过验证证书的方式来登录VPS。 我们可以通过此命令来配置:ssh-copy-id -p you_port -i ~/.ssh/id_rsa.pub root@you_ip
,因为配置后不需要输入密码了,就重新提问。
提问:如何通过命令行或者脚本控制打开iTerm2, 并自动执行命令:ssh root@you_ip -p you_port ChatGPT回答:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 你可以通过脚本控制打开 iTerm2 并自动执行命令。以下是一个示例 bash 脚本,它将打开 iTerm2,并在新标签页中执行 `ssh root@you_ip -p you_port` 命令: #!/bin/bash osascript <<END tell application "iTerm2" create window with default profile tell current session of current window write text "ssh root@you_ip -p you_port" end tell end tell END 这个脚本使用 AppleScript 和 `osascript` 命令与 iTerm2 进行通信。它首先告诉 iTerm2 创建新窗口,并在当前窗口的一个新标签页中执行 `ls -la` 命令。 你可以通过修改 `write text` 行来执行不同的命令。 要运行该脚本,请将其保存为文件(例如 `test.sh`),并使用终端命令运行: bash test.sh 如果一切都设置正确,则 iTerm2 将在新窗口中打开,并自动执行指定的命令。 注意: 在macOS10.14 Mojave或更高版本中,您需要前往“系统偏好设置”>“安全性和隐私”>“隐私”选项卡,并确保已将您的终端应用程序添加到“完全磁盘访问权限”列表中,才能够在终端中以脚本方式启动您的应用程序。
没想到ChatGPT新生成了一个不同的脚本,复制过去后发现能正常运行,到此一键打开iTerm2
并自动登录VPS的wofkflow就开发完成了。
总结 从最近的使用来看,在开发这一块,ChatGPT生成的结果看起来是那么回事,但是生成的代码少有能直接就拿去用的。不过对启发我们的思维,学习和了解陌生领域非常有帮助。我现在用的是ChatGPT3.5
的API,ChatGPT4
更牛,但是需要申请,已经申请ChatGPT4
的API权限一个多月了,还没有得到任何回复,期望能早日通过申请。