使用Applescript将命令和字符串发送到Terminal.app

Pet*_*uza 50 macos terminal applescript

我想做这样的事情:

tell application "Terminal"
  activate
  do script "ssh user@server.com"
  -- // write user's password
  -- // write some linux commands to remote server
end tell
Run Code Online (Sandbox Code Playgroud)

例如,要登录服务器,输入密码,然后登录mysql并选择一个数据库.
我每天都输入它,将它捆绑到脚本中会非常有用.

此外,是否有应用程序(终端,Finder等)可以在Applescript中使用的命令,属性,功能等参考?谢谢!

编辑:让我澄清一下:我不想做几个'做脚本',因为我尝试过但不起作用.我想打开一个终端窗口,然后模拟人类输入一些字符并点击输入.可能是密码,可能是命令,等等,只是将字符发送到正好运行ssh的终端.我试过按键,似乎没有用.

CRP*_*CRP 54

首先连接到服务器并等待6秒钟(您可以更改它),然后使用相同的选项卡在远程服务器上执行您需要的任何操作

tell application "Terminal"
   set currentTab to do script ("ssh user@server;")
   delay 6
   do script ("do something remote") in currentTab
end tell
Run Code Online (Sandbox Code Playgroud)

  • 这些会等待完成吗?我的意思是什么时候```脚本```返回? (2认同)

小智 15

正如EvanK所说,每个脚本行都会打开一个新窗口,但是你可以
用相同的do脚本运行两个命令,用分号分隔它们.例如:

tell application "Terminal"
    do script "date;time"
end tell
Run Code Online (Sandbox Code Playgroud)

但限制似乎是两个命令.

但是,您可以将"在窗口1中"附加到do脚本命令(对于第一个脚本之后的每个脚本)以获得相同的效果并继续在同一窗口中运行所需的多个命令:

tell application "Terminal"
    do script "date"
    do script "time" in window 1
    do script "who" in window 1
end tell
Run Code Online (Sandbox Code Playgroud)


请注意,我只是使用who,date和time命令作为示例...替换为您需要的任何命令.


Dan*_*Dan 11

这是另一种方式,但它的优点是它启动终端,将它带到前面,并只创建一个窗口.

当我想要整齐地呈现我的脚本结果时,我喜欢这个.

tell application "Terminal"
    activate
    set shell to do script "echo 1" in window 1
    do script "echo 2" in shell
    do script "echo 3" in shell
end tell
Run Code Online (Sandbox Code Playgroud)


All*_*bel 8

这个怎么样?不需要密钥代码(至少在Lion中,之前不确定),子程序简化了主脚本.

以下脚本将以"me"用户ssh到localhost,在1秒延迟后输入密码"myPassw0rd",发出ls,延迟2秒,然后退出.

tell application "Terminal"
    activate
    my execCmd("ssh me@localhost", 1)
    my execCmd("myPassw0rd", 0)
    my execCmd("ls", 2)
    my execCmd("exit", 0)
end tell
on execCmd(cmd, pause)
    tell application "System Events"
        tell application process "Terminal"
            set frontmost to true
            keystroke cmd
            keystroke return
        end tell
    end tell
    delay pause
end execCmd
Run Code Online (Sandbox Code Playgroud)


小智 5

你不需要"告诉"终端做任何事情.AppleScript可以直接执行shell脚本.

set theDir to "~/Desktop/"
do shell script "touch " & theDir &"SomeFile.txt"
Run Code Online (Sandbox Code Playgroud)

管他呢 ...