我想要完成的事情就像这个this question中描述的那样。基本上使用AppleScript将命令发送到Terminal.app。
然而,我不想要这种行为:使用do script
指令发送的每个命令都会回显给终端。我目前正在将AppleScript与Cocoa集成,有时软件会将敏感信息(如密码)发送到终端。
是否有某种方法可以禁用此行为,例如DOS批处理文件中的@echo off
指令?
修改
为了澄清我的问题,我会详细说明。假设我们有一个像这样的AppleScript:
tell application "Terminal"
set currentTab to do script "login"
do script "username" in currentTab
do script "password" in currentTab
end tell
我注意到如果终端应用程序已经运行,无论是否打开任何终端窗口,do script
指令中的命令都会在它被送到shell之前被回显。要在终端中说明上述脚本的结果:
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未在脚本执行时运行,则不会发生这种情况。
答案 0 :(得分:1)
在shell有机会响应之前你正在“输入”东西(在这种情况下,在login
有机会关闭回声之前)。诸如expect之类的工具解决了编写任意命令行实用程序脚本的问题,这在一般情况下是更好的解决方案,但是从你的问题中你不清楚你要做什么。
你试图编写什么命令,为什么要通过终端进行编写?
答案 1 :(得分:0)
要隐藏Terminal.app中的命令,请先运行以下命令:
stty -echo
再次显示命令:
stty echo
您也可以直接从AppleScript运行命令,而不是使用Terminal.app:
set theResult to do shell script "cal -y 2011"
甚至更好,使用NSTask直接从Objective-C运行命令 (因为你的应用程序正在使用Cocoa,我认为它已经(部分)用Objective-C编写)