2011-04-03 12 views
1

私が達成したいのは、this questionに記載されているものです。基本的にAppleScriptを使用してTerminal.appにコマンドを送信します。AppleScriptを使用してコマンドと文字列をTerminal.appにエコーオフで送信

しかし、この動作は望ましくありません。do scriptディレクティブを使用して送信されたすべてのコマンドは、端末にエコーされます。私は現在、AppleScriptをCocoaに統合しています。また、ソフトウェアがパスワードなどの機密情報を端末に送信することもあります。

DOSバッチファイルの@echo offディレクティブなど、この動作を無効にする方法はありますか?

EDIT

私の質問を明確にするために、私はもっと詳しく説明します。私は、ターミナルアプリケーションがすでに開いている任意のターミナルウィンドウの有無にかかわらず、実行されている場合は、それが供給される前に、do script指示のコマンドがエコーされることに気付いた

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

:我々はそのようなこの一つとしてAppleScriptを持っていると仮定シェル。ターミナルでは、上記のスクリプトの結果を説明するために:Terminal.appは、スクリプトの実行時に実行されていない場合

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を使用しての

stty echo 

stty -echo 

再びコマンドを表示するには:最初にこのコマンドを実行Terminal.appでコマンドを非表示にするには

答えて

1

シェルはこの場合には(それらに応答する機会を持つ前に、「タイピング」の事ですloginにエコーをオフにする前に)。 expectのようなツールは、一般的なケースではより良い解決策となる任意のコマンドラインユーティリティのスクリプトを作成する問題を解決しますが、あなたが何をしようとしているのかはあなたの質問からは明らかではありません。

あなたはスクリプトを作成しようとしていますが、なぜターミナル経由でやっていますか?

+0

私はCocoaアプリケーションからsshログインをスクリプトしようとしています。だから私はTerminal.appが必要です。 – avee

+0

@avee:Expectを使用しないと、その機能のいくつかのビットが再実装されてしまうでしょう: "wait for" login: ";ユーザー名を送信する。 "assword:"を待つ。パスワードを送る。 ... " –

+0

@Chris Johnsen @Nicholas Riley:ありがとう、私はExpect – avee

0

AppleScript:

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

さらに、Objective-Cウィジェットから直接コマンドを実行することもできますh NSTask。
(あなたのアプリがココアを使用しているので、私はそれがされていると仮定し(部分的に)Objective-Cで書かれた)

+0

ありがとうございますが、これは私が求めていたものではありません。私は何を意味するのかを明確にするために質問を編集しました。私は対話シェルを必要としたので、 'do shell script'は動作しませんでした。同じ理由でNSTaskを使用しても機能しません。 – avee

関連する問題