如何发送Ctrl+;C到除AppleScript中当前选项卡以外的所有iTerm2选项卡?

如何发送Ctrl+;C到除AppleScript中当前选项卡以外的所有iTerm2选项卡?,applescript,iterm2,Applescript,Iterm2,在iTerm2中,我有一段代码,它向包括当前选项卡在内的所有选项卡发送特定命令。但是,有时候,一些选项卡被卡住了,我想在执行命令之前让它们进入shell提示符。但是,将Ctrl+C发送到当前选项卡将阻止脚本继续 我想将终止信号发送到所有其他选项卡,但不发送到当前选项卡 osascript \ -e 'tell application "iTerm"' \ -e " tell current window" \ -e ' repea

在iTerm2中,我有一段代码,它向包括当前选项卡在内的所有选项卡发送特定命令。但是,有时候,一些选项卡被卡住了,我想在执行命令之前让它们进入shell提示符。但是,将Ctrl+C发送到当前选项卡将阻止脚本继续

我想将终止信号发送到所有其他选项卡,但不发送到当前选项卡

osascript \
    -e 'tell application "iTerm"' \
    -e " tell current window" \
    -e '  repeat with aTab in tabs' \
    -e '   tell aTab' \
    -e '    repeat with asession in sessions' \
    -e '     tell asession' \
    -e '      tell application "System Events" to keystroke "c" using {control down}' \
    -e '     end tell' \
    -e '    end repeat' \
    -e '   end tell' \
    -e '  end repeat' \
    -e ' end tell' \
    -e 'end tell'
我试着用“如果aTab不等于当前选项卡”来调节“告诉aTab”,但仍然不起作用。

下面的示例AppleScript代码在脚本编辑器下的macOS CatalinaiTerm2下进行了测试,构建了3.3.12,并在没有任何问题的情况下为我工作,当前窗口有多个选项卡,每个选项卡都有一个会话,并且除了执行时是当前选项卡的选项卡外,停止每个选项卡中正在运行的进程

告诉应用程序“iTerm”
激活
告诉当前窗口
将excludeTab设置为当前选项卡
选择选项卡1
在选项卡中使用aTab重复此操作
选择aTab
如果当前选项卡不等于excludeTab,则
告诉当前会话
将应用程序“系统事件”告知
使用{control down}的键代码8
结束语
如果结束
结束重复
选择excludeTab
结束语
结束语

注意事项:

我强烈建议在这样的脚本上使用
osascript-e命令
,而不是使用
#创建一个可执行文件/usr/bin/osascript
shebang,然后将示例AppleScript代码按原样复制并粘贴到可执行文件中。如果在这样的脚本上使用
osascript-e命令
,这个IMO就更容易根据需要进行维护和修改



注意:示例AppleScript代码就是这样的,任何包含的错误处理都不包含任何其他适当的错误处理。用户有责任根据需要添加任何适当的错误处理。请查看中的语句和语句。另见。此外,在适当的情况下,可能需要在事件之间使用该命令,例如延迟0.5,延迟值设置适当。

使用
“系统事件”
to
keystroke/keycode
是UI脚本,它要求目标窗口和选项卡在执行每个
keystroke/keycode
命令时具有焦点。我明白了,您对如何实现我尝试的目标有其他建议吗?