macos terminal applescript

macos - iterm2 tcsh



Envío de comandos y cadenas a Terminal.app con Applescript (15)

¿Qué tal algo así?

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

Quiero hacer algo como esto:

tell application "Terminal" activate do script "ssh [email protected]" -- // write user''s password -- // write some linux commands to remote server end tell

Por ejemplo, para iniciar sesión en el servidor, ingrese la contraseña y luego inicie sesión en mysql y seleccione una base de datos.
Escribo eso todos los días y sería muy útil incluirlo en un script.

Además, ¿hay alguna referencia de qué comandos, propiedades, funciones, etc. tienen las aplicaciones (Terminal, Finder, etc.) disponibles para usar dentro de Applescript? ¡Gracias!

EDITAR : Permítanme aclarar esto: no quiero hacer varios ''do script'' como lo intenté y no funciona. Quiero abrir una ventana de Terminal, y luego emular un tipeo humano en algunos caracteres y presionar enter. Podrían ser contraseñas, podrían ser comandos, lo que sea, simplemente enviar chars a la Terminal que está ejecutando ssh. Intenté pulsar la tecla y parece que no funciona.


¿Qué tal esto? No hay necesidad de códigos clave (al menos en Lion, no estoy seguro de lo anterior), y una subrutina simplifica el script principal.

La secuencia de comandos siguiente se ssh a localhost como usuario "me", ingrese la contraseña "myPassw0rd" después de un retraso de 1 segundo, emita ls, espere 2 segundos y luego salga.

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


Aquí hay otra manera, pero con la ventaja de que lanza Terminal, lo trae al frente y crea solo una ventana.

Me gusta esto cuando quiero que me presenten los resultados de mi script.

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


Como EvanK indicó que cada línea de script do abrirá una nueva ventana, sin embargo, puede ejecutar
dos comandos con el mismo do script separándolos con un punto y coma. Por ejemplo:

tell application "Terminal" do script "date;time" end tell

Pero el límite parece ser dos comandos.

Sin embargo, puede agregar "en la ventana 1" al comando do script (para cada secuencia de comandos do después de la primera) para obtener el mismo efecto y continuar ejecutando tantos comandos como necesite en la misma ventana:

tell application "Terminal" do script "date" do script "time" in window 1 do script "who" in window 1 end tell


Tenga en cuenta que acabo de utilizar el comando who, date y time como ejemplo ... reemplace con los comandos que necesite.


Como buena solución, prueba-

$ open -a /Applications/Utilities/Terminal.app *.py

o

$ open -b com.apple.terminal *.py

Para el shell lanzado, puede ir a Preferencias> Shell> configurarlo para salir si no hay error.

Eso es.


Construí este script Está en Yosemite y es script bash usando AppleScript para elegir una lista de usuarios para servidores SSH. Básicamente, usted define una IP y luego los nombres de los usuarios ... cuando la aplicación se inicia, le pregunta en quién desea iniciar sesión, ya que ... el terminal SSH se inicia y se registra solicitando una contraseña ...

(*** * --- --- --- --- --- * 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

Lo recomiendo sin embargo; Nathan Pickmans publica más arriba sobre Shuttle ( http://fitztrev.github.io/shuttle/ ) ... una aplicación muy inteligente y simple.


El último ejemplo muestra errores debajo de 10.6.8 (Build 10K549) causados ​​por la palabra clave "pause".

Sustituirlo por la palabra "esperar" lo hace funcionar:

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


No necesita "decirle" a Terminal que haga nada. AppleScript puede hacer scripts de shell directamente.

set theDir to "~/Desktop/" do shell script "touch " & theDir &"SomeFile.txt"

o lo que sea ...


Petruza,

En lugar de usar la tecla, use el código de tecla.
El siguiente ejemplo debería funcionar para usted.

tell application "System Events" tell application process "Terminal" set frontmost to true key code {2, 0, 17, 14} keystroke return end tell end tell

El ejemplo anterior enviará los caracteres {date} a Terminal y luego
retorno de tecla entrará y ejecutará el comando. Usa el ejemplo de arriba
con los códigos clave que necesita y podrá hacer lo que está tratando de hacer.


Podría estar equivocado, pero creo que la integración de Applescript Terminal es un acuerdo de una sola vez ... Es decir, cada llamada de do script es como abrir una ventana de terminal diferente, así que no creo que puedas interactuar con ella en absoluto.

Puede copiar las claves públicas SSH para evitar la solicitud de contraseña, luego ejecutar todos los comandos unidos ( advertencia: lo siguiente no se ha probado ):

tell application "Terminal" activate do script "ssh [email protected] ''/home/jdoe/dosomestuff.sh && /home/jdoe/dosomemorestuff.sh''" end tell

Alternativamente, puede ajustar los comandos ssh y subsiguientes en un script de shell usando Expect , y luego invocar dicho script de shell desde su Applescript.


Por qué no usar expect:

tell application "Terminal" activate set currentTab to do script ("expect -c ''spawn ssh user@IP; expect /"*?assword:*/"; send /"MySecretPass /"; interact''") end tell


Primero, conéctese al servidor y espere 6 segundos (puede cambiar eso) y luego ejecute lo que necesite en el servidor remoto con la misma pestaña

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


Su pregunta es específicamente sobre cómo hacer que AppleScript haga lo que quiera. Pero, para el ejemplo particular descrito, es posible que desee considerar ''esperar'' como una solución.



configure ssh sin contraseña ( ssh-keygen , luego agregue la clave a ~/.ssh/authorized_keys en el servidor). Realice una entrada en ~/.ssh/config (en su escritorio), de modo que cuando ejecute ssh mysqlserver, vaya al usuario @ hostname ... O cree un alias de shell, como gotosql, que se expanda a ssh user@host -t ''mysql_client ...'' para iniciar el cliente mysql de manera interactiva en el servidor.

Entonces probablemente necesites la respuesta de otra persona para guiar el proceso después de eso, ya que no sé cómo configurar comandos de inicio para mysql.

¡Al menos eso mantiene su contraseña de ssh fuera de la secuencia de comandos!