1

几个小时以来,我一直试图让这个脚本正确,并且已经走了很远,但是我通过将命令传递给 X11 xterm 窗口而陷入困境。

我需要连接到 xterm telnet 服务器。这是正常的程序:

  • 打开终端
  • 输入命令:(xterm -fa Monaco -fs 12这会打开一个 X11 窗口,字体更大)
  • 在新的 xterm 窗口中,我输入:telnet -l username server ip
  • 这将打开 telnet 连接并提示输入密码

因为一些没有终端知识的用户必须能够访问这个连接,所以我尝试了几种方法来编写一个可以在 Mac 上运行的脚本。并打开连接,让用户在打开的 telnet 窗口中工作。我最终为此使用了 AppleScript,并编写了以下脚本:

tell application "X11"
    activate
end tell

tell application "System Events"
    tell process "X11"
        tell menu bar 1
            tell menu "Applications"
                click menu item "Terminal"
                tell window 1
                    run
                    do script "xterm -fa Monaco -fs 12"
                    delay 2
                    do script "telnet -l meister 192.169.25.1"
                end tell
            end tell
        end tell
    end tell
end tell

但不幸的是,这不起作用。它只打开一个 X11 xterm 窗口,没有更大的字体,也没有终端命令,它只是一个空窗口。

你们中有人知道我如何更改脚本以使其正常工作,或者也许有一种方法可以使用其他类型的脚本而不是 AppleScript 来做到这一点?

非常感谢您提前提供的帮助!

4

2 回答 2

5

首先,要启动 xterm,只需执行以下操作:

do shell script "xterm -fa Monaco -fs 12 -wf"

如果需要,这将自动启动 X11。

根据您的系统,/usr/X11/bin 可能不在路径上,因此您可能希望这样做:

do shell script "/usr/X11/bin/xterm -fa Monaco -fs 12 -wf"

如果您希望 xterm 运行命令而不是仅仅打开 shell,请使用 -e 参数:

do shell script "/usr/X11/bin/xterm -fa Monaco -fs 12 -e telnet -l meister 192.169.25.1"

如果 telnet 命令失败,xterm 窗口将立即关闭;要调试它,请在“-e”之前添加一个“-hold”。

既然你问了“一些其他类型的脚本而不是苹果脚本”,同样的事情显然是 bash 中的一个单行代码,两个带有 shebang:

#!/bin/sh
/usr/X11/bin/xterm -fa Monaco -fs 12 -e telnet -l meister 192.169.25.1

如果将其保存为“doit”和“chmod +x doit”,则可以从终端以“./doit”的形式运行它。

或者,如果您希望它在 Finder 中可双击,请将其重命名为“doit.command”。

于 2012-06-27T00:17:36.380 回答
-1

尝试:

tell application "X11"
    activate
    tell application "System Events" to tell process "X11"
        click menu item "Terminal" of menu 1 of menu bar item "Applications" of menu bar 1
        delay 0.5
        keystroke "xterm -fa Monaco -fs 12"
        delay 0.5
        keystroke return
        delay 0.5
        keystroke "telnet -l meister 192.169.25.1"
        delay 0.5
        keystroke return
    end tell
end tell
于 2012-06-26T12:34:31.443 回答