2011-04-03 38 views
1

我想要做到的是像在这个this question描述的。基本上使用AppleScript将命令发送到Terminal.app。使用AppleScript发送命令和字符串到Terminal.app回声关

但是有这种行为,我不想要的:使用do script指令发送的每个命令都将被终端。我目前正在将AppleScript与Cocoa集成在一起,并且有时候软件会向终端发送密码等敏感信息。

是否有某种方式来禁用此行为,如@echo off指令在DOS批处理文件?

编辑

为了澄清我的问题,我会阐述更多。假设我们有一个AppleScript,例如这是一个:

tell application "Terminal" 
    set currentTab to do script "login" 
    do script "username" in currentTab 
    do script "password" in currentTab 
end tell 

我注意到,如果终端应用程序已经运行,有或没有打开的任何终端窗口,在do script指令的命令将它送入之前呼应贝壳。为了说明在终端上面的脚本的结果:

Last login: Tue 5 Apr hh:mm:ss on ttys001 
login  <--\ 
username  <----unwanted echoes 
password  <--/ 
<machine>:~ <user>$ login 
username: username 
password: **** 
... (interactive Terminal session) 

然而这不,如果Terminal.app不是在脚本执行运行发生。

回答

1

你之前“打字”的事情外壳有机会回应他们(在这种情况下, ,之前login有机会关闭回声)。诸如expect之类的工具解决了脚本编写任意命令行实用程序的问题,这在一般情况下可能是更好的解决方案,但从您的问题中不清楚您要做什么。

你试图编写脚本的命令是什么,你为什么通过终端执行它?

+0

我想从可可应用程序脚本ssh登录。这就是为什么我需要Terminal.app。 – avee 2011-04-05 03:38:55

+0

@avee:如果你不使用Expect,你可能会重新实现一些功能:“等待”登录:“;发送用户名;等待“密码:”;发送密码; ...“ – 2011-04-05 06:23:02

+0

@克里斯约翰森@尼古拉斯莱利:谢谢,我想我会看看希望 – avee 2011-04-05 06:41:28

0

隐藏在Terminal.app命令第一运行以下命令:

stty -echo 

要显示再次命令:

stty echo 

而不是使用Terminal.app的,你也可以直接从运行命令AppleScript的:

set theResult to do shell script "cal -y 2011" 

甚至更​​好,直接从Objective-C的机智运行的命令h NSTask。
(因为你的应用程序使用可可我认为它已经被(部分写入)在Objective-C)

+0

谢谢你的答案,但这并不完全是我问的。我编辑了我的问题来澄清我的意思。 'do shell script'将无法工作,因为我需要一个交互式shell。使用NSTask不会出于同样的原因。 – avee 2011-04-05 02:39:48