Wysyłanie poleceń i ciągów do terminala.aplikacja z Applescript
Chcę zrobić coś takiego:
tell application "Terminal"
activate
do script "ssh [email protected]"
-- // write user's password
-- // write some linux commands to remote server
end tell
Na przykład, aby zalogować się na serwer, wprowadź hasło, a następnie zaloguj się do mysql i wybierz DB.
Wpisuję to codziennie i byłoby naprawdę pomocne połączyć to w skrypt.
Również, czy istnieje odniesienie do Jakie polecenia, Właściwości, funkcje, itp. czy aplikacje (Terminal, Finder, itp.) są dostępne do użycia w Applescript? dzięki!
EDIT : wyjaśnię to: I don ' t want to do kilka "zrobić skrypt" jak próbowałem i nie działa. Chcę otworzyć okno terminala, a następnie emulować ludzkie wpisywanie niektórych znaków i naciśnięcie enter. Mogą to być hasła, mogą to być polecenia, cokolwiek, wysyłanie znaków do terminala, na którym działa ssh. Próbowałem nacisnąć klawisz i nie działa.
15 answers
Najpierw połącz się z serwerem i odczekaj 6 sekund (możesz to zmienić), a następnie wykonaj wszystko, czego potrzebujesz na zdalnym serwerze za pomocą tej samej zakładki
tell application "Terminal"
set currentTab to do script ("ssh user@server;")
delay 6
do script ("do something remote") in currentTab
end tell
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 08:08:06
Jak stwierdził EvanK, każda linia skryptu do otworzy nowe okno, jednak można uruchomić
dwa polecenia z tym samym skryptem do, oddzielając je średnikiem. Na przykład:
tell application "Terminal"
do script "date;time"
end tell
Ale limit wydaje się być dwa polecenia.
Możesz jednak dodać "w oknie 1" do polecenia do script (dla każdego skryptu do po pierwszym), aby uzyskać ten sam efekt i kontynuować uruchamianie tylu poleceń, ile potrzebujesz w tym samym okno:
tell application "Terminal"
do script "date"
do script "time" in window 1
do script "who" in window 1
end tell
zauważ, że właśnie użyłem polecenia who, date I time jako przykładu...zastąp
z dowolnymi poleceniami.
Jest inny sposób, ale z tą zaletą, że uruchamia Terminal, przenosi go na przód i tworzy tylko jedno okno.
Lubię to, gdy chcę być zgrabnie przedstawiony z wynikami mojego scenariusza.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-15 22:04:35
Co ty na to? Nie ma potrzeby stosowania kodów klawiszy (przynajmniej w Lionie, Nie wiem co wcześniej), a podprogram upraszcza skrypt główny.
Poniższy skrypt spowoduje SSH do localhost jako użytkownik "me", wprowadź hasło "myPassw0rd" po 1 sekundzie opóźnienia, wydaj ls, opóźnij 2 sekundy, a następnie zakończ.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-06 09:02:55
Nie musisz "mówić" Terminalowi, żeby cokolwiek zrobił. AppleScript może wykonywać skrypty powłoki bezpośrednio.
set theDir to "~/Desktop/"
do shell script "touch " & theDir &"SomeFile.txt"
Albo cokolwiek ...Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-16 18:07:10
Twoje pytanie dotyczy w szczególności tego, jak sprawić, by Applescript robił to, co chcesz. Ale dla konkretnego przykładu opisanego, możesz chcieć przyjrzeć się "oczekiwaniu" jako rozwiązaniu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-16 20:33:49
Dlaczego nie używać expect:
tell application "Terminal"
activate
set currentTab to do script ("expect -c 'spawn ssh user@IP; expect \"*?assword:*\"; send \"MySecretPass
\"; interact'")
end tell
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-28 14:53:31
Trochę pokrewne, warto zajrzeć do Shuttle ( http://fitztrev.github.io/shuttle/), jest to menu skrótów SSH dla OSX.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 22:14:49
Mogę się mylić, ale myślę, że integracja terminala Applescript to jednorazowa transakcja...Oznacza to, że każde wywołanie do script
jest jak otwarcie innego okna terminala, więc nie sądzę, że można z nim w ogóle wchodzić w interakcję.
Możesz skopiować klucze publiczne SSH, aby zapobiec monitowi o hasło, a następnie wykonać wszystkie połączone ze sobą polecenia ( Ostrzeżenie: poniższe polecenia są całkowicie niesprawdzone):
tell application "Terminal"
activate
do script "ssh [email protected] '/home/jdoe/dosomestuff.sh && /home/jdoe/dosomemorestuff.sh'"
end tell
Alternatywnie, można zawinąć ssh i kolejne polecenia w skrypcie powłoki używając Expect , a następnie wywołaj skrypt powłoki z twojego Applescriptu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-08 22:35:04
Skonfiguruj ssh bez hasła (ssh-keygen
, a następnie dodaj klucz do ~/.ssh/authorized_keys
na serwerze). Zrób wpis w ~/.ssh/config
(na Twoim pulpicie), tak aby po uruchomieniu serwera SSH mysqlserver trafił on na user@hostname... Można też utworzyć alias powłoki, taki jak gotosql, który rozszerza się do ssh user@host -t 'mysql_client ...'
, aby interaktywnie uruchomić klienta mysql na serwerze.
Wtedy prawdopodobnie potrzebujesz odpowiedzi kogoś innego, aby skrypt procesu po tym, ponieważ Nie wiem, jak ustawić komendy startowe dla mysql.
Przynajmniej to utrzymuje twój ssh hasło ze skryptu!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-08 23:56:54
Petruza,
Zamiast naciśnięcia klawisza użyj kodu klucza.
Poniższy przykład powinien działać dla Ciebie.
tell application "System Events"
tell application process "Terminal"
set frontmost to true
key code {2, 0, 17, 14}
keystroke return
end tell
end tell
Powyższy przykład wyśle znaki {d A t e}
do terminala, a następnie
klawisz return wejdzie i uruchomi
dowództwo. Użyj powyższego przykładu
z dowolnymi kluczowymi kodami, których potrzebujesz
i będziesz w stanie zrobić to, co próbujesz zrobić.
Ostatni przykład pobiera błędy pod 10.6.8 (Build 10k549) spowodowane przez słowo kluczowe "pauza".
Zastąpienie go słowem "wait" sprawia, że działa:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-16 09:10:38
A może coś takiego:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-11 06:41:47
Jako schludne rozwiązanie, spróbuj -
$ open -a /Applications/Utilities/Terminal.app *.py
Lub
$ open -b com.apple.terminal *.py
Dla uruchomionej powłoki, możesz przejść do Preferencje > powłoka > ustaw ją na zakończoną, jeśli nie ma błędu.
To wszystko.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-20 04:53:27
Zbudowałem ten skrypt. Jest w Yosemite i jest to skrypt bash za pomocą AppleScript, aby wybrać listę użytkowników dla serwerów SSH. Zasadniczo definiujesz adres IP, a następnie nazwy użytkowników.. po uruchomieniu aplikacji pyta, kogo chcesz się zalogować.. terminal SSH zostanie uruchomiony i zalogowany z monitem o hasło...
(***
* --- --- --- --- ---
* 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
Gorąco jednak polecam; Nathan Pickmans post powyżej o Shuttle ( http://fitztrev.github.io/shuttle / ) .. bardzo inteligentny i prosty podanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 10:31:35