私はこのようなことをしたい:
tell application "Terminal"
activate
do script "ssh [email protected]"
-- // write user's password
-- // write some linux commands to remote server
end tell
たとえば、サーバーにログインするには、パスワードを入力してからmysqlにログインし、DBを選択します。
これを毎日入力すると、スクリプトにバンドルすると実際にになります。
また、アプリケーション(ターミナル、Finderなど)がApplescript内で使用できるコマンド、プロパティ、関数などのリファレンスはありますか?ありがとう!
[〜#〜] edit [〜#〜]:これをはっきりさせてください:私が試したので動作しないので、いくつかの「スクリプトを実行」したくありません。ターミナルウィンドウを開き、いくつかの文字を入力してEnterキーを押します。パスワードである可能性があり、コマンドである可能性があります。たまたまsshを実行している端末に文字を送信するだけです。キーストロークを試しましたが、動作しないようです。
最初にサーバーに接続し、6秒待機し(変更可能)、同じタブを使用してリモートサーバーで必要なものを実行します。
tell application "Terminal"
set currentTab to do script ("ssh user@server;")
delay 6
do script ("do something remote") in currentTab
end tell
EvanKが述べたように、各doスクリプト行は新しいウィンドウを開きますが、実行することはできます
同じdoスクリプトを持つ2つのコマンドをセミコロンで区切って指定します。例えば:
tell application "Terminal"
do script "date;time"
end tell
しかし、制限は2つのコマンドのようです。
ただし、do scriptコマンドに「in window 1」を追加して(最初のdoスクリプトの後のすべてのdoスクリプトに対して)、同じ効果を取得し、同じウィンドウで必要な数のコマンドを実行し続けることができます。
tell application "Terminal"
do script "date"
do script "time" in window 1
do script "who" in window 1
end tell
Who、date、およびtimeコマンドを例として使用したことに注意してください。必要なコマンドに置き換えてください。
別の方法もありますが、Terminalを起動して前面に表示し、ウィンドウを1つだけ作成するという利点があります。
自分の台本の結果をきちんと提示したいとき、私はこれが好きです。
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
これはどう?キーコードは必要ありません(少なくともLionでは、以前はわかりません)。サブルーチンを使用すると、メインスクリプトが簡単になります。
以下のスクリプトは、ユーザー「me」としてlocalhostにsshし、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
何もするためにターミナルに「伝える」必要はありません。 AppleScriptはシェルスクリプトを直接実行できます。
set theDir to "~/Desktop/"
do Shell script "touch " & theDir &"SomeFile.txt"
または何でも...
Expectを使用しない理由:
tell application "Terminal"
activate
set currentTab to do script ("expect -c 'spawn ssh user@IP; expect \"*?assword:*\"; send \"MySecretPass
\"; interact'")
end tell
あなたの質問は、具体的にApplescriptにあなたが望むことをさせる方法についてです。ただし、説明されている特定の例では、ソリューションとして「期待」を検討することができます。
ちょっと関連して、あなたはシャトル( http://fitztrev.github.io/shuttle/ )を見たいかもしれません、それはOSXのSSHショートカットメニューです。
誤解される可能性がありますが、Applescript Terminalの統合は単発的な取引だと思います...つまり、それぞれdo script
呼び出しは、別のターミナルウィンドウを開くようなものなので、操作することはまったくできないと思います。
パスワードのプロンプトを防ぐためにSSH公開キーをコピーしてから、すべてのコマンドを結合して実行できます(警告:以下は完全にテストされていません):
tell application "Terminal"
activate
do script "ssh [email protected] '/home/jdoe/dosomestuff.sh && /home/jdoe/dosomemorestuff.sh'"
end tell
または、 Expect を使用してsshおよび後続のコマンドをシェルスクリプトでラップし、Applescriptからシェルスクリプトを呼び出すこともできます。
パスワードなしのsshをセットアップします(ssh-keygen
、次にサーバー上の~/.ssh/authorized_keys
にキーを追加します)。 ~/.ssh/config
(デスクトップ上)にエントリを作成し、ssh mysqlserverを実行するとuser @ hostnameに移動するようにします...または、ssh user@Host -t 'mysql_client ...'
に展開されるgotosqlなどのシェルエイリアスを作成しますサーバー上で対話的にmysqlクライアントを起動します。
その後、mysqlの起動コマンドを設定する方法がわからないため、その後のプロセスをスクリプト化するために、おそらく誰か他の人の回答が必要になるでしょう。
少なくとも、それはあなたのsshパスワードをスクリプトから締め出します!
ペトルーザ、
キーストロークを使用する代わりに、キーコードを使用します。
次の例が役立ちます。
tell application "System Events"
tell application process "Terminal"
set frontmost to true
key code {2, 0, 17, 14}
keystroke return
end tell
end tell
上記の例では、文字{d a t e}をターミナルに送信してから、
keystroke returnはコマンドを入力して実行します。上記の例を使用してください
必要なキーコードを使用して、あなたがしようとしていることを実行できるようになります。
最後の例では、キーワード「一時停止」が原因で10.6.8(ビルド10K549)でエラーが発生します。
単語「wait」に置き換えると、機能します。
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, wait)
tell application "System Events"
tell application process "Terminal"
set frontmost to true
keystroke cmd
keystroke return
end tell
end tell
delay wait
end execCmd
このようなものはどうですか:
tell application "Terminal"
activate
do Shell script "Sudo dscl localhost -create /Local/Default/Hosts/cc.josmoe.com IPAddress 127.0.0.1"
do Shell script "Sudo dscl localhost -create /Local/Default/Hosts/cc.josmos2.com IPAddress 127.0.0.1"
end tell
きちんとしたソリューションとして、試してください-
$ open -a /Applications/Utilities/Terminal.app *.py
または
$ open -b com.Apple.terminal *.py
起動したシェルの場合、[設定]> [シェル]に移動し、エラーがなければ終了するように設定できます。
それでおしまい。
このスクリプトを作成しました。 Yosemiteにあり、AppleScriptを使用してSSHサーバーのユーザーのリストを選択するbashスクリプトです。基本的には、IPを定義してからユーザー名を定義します..アプリケーションが起動すると、ログインするユーザーを尋ねます..SSHターミナルが起動し、パスワードを要求してログインします...
(***
* --- --- --- --- ---
* JD Sports Fashion plc
* Apple Script
* Khaleel Mughal
* --- --- --- --- ---
* #SHELLSTAGINGSSHBASH
* --- --- --- --- ---
***)
set stagingIP to "192.162.999.999"
set faciaName to (choose from list {"admin", "marketing", "photography_cdn"})
if faciaName is false then
display dialog "No facia was selected." with icon stop buttons {"Exit"} default button {"Exit"}
else
set faciaName to (item 1 of faciaName)
tell application "Terminal"
activate
do script "ssh " & faciaName & "@" & stagingIP & ""
end tell
end if
ただし、強くお勧めします。 Nathan Pickmansの投稿 シャトルについて( http://fitztrev.github.io/shuttle/ )..非常にスマートでシンプルなアプリケーション。