Ausführen einer Reihe von Befehlen in Terminal

2

Ich führe die folgenden Befehle für logkext häufig in meinem Terminal aus und möchte einen Weg kennen, um den gesamten Prozess zu automatisieren.

  1. Terminal öffnen
  2. Typ "sudo logKextClient"
  3. Geben Sie das Administratorkennwort ein
  4. logKextClient hat ein eigenes Passwort, das ich jetzt eingeben muss
  5. logKextClient läuft jetzt. Eingabeaufforderung istlogKextClient >
  6. Ich muss hier einen Befehl eingeben. "öffnen"
  7. Dann muss ich ein Fenster schließen, das sich öffnet. Das Fenster heißt out_logFile.txt. Normalerweise wird es in TextEdit geöffnet. Es macht mir nichts aus, wenn ich gewaltsam aufhöre. Als Kopie wird die Datei auf dem Desktop gespeichert.

Ich möchte in der Lage sein, auf etwas zu doppelklicken und die obige Liste von Befehlen / Aktionen fehlerfrei auszuführen.

Vielen Dank für Ihre Anregungen.

Sommersprossen
quelle

Antworten:

1

Ich habe genau denselben Prozess durchlaufen, als ich mit logKext rumgespielt habe. Der Unix-Befehl, den Sie untersuchen möchten, ist / usr / bin / expect.

Es kann schnell komplex werden, aber im Grunde handelt es sich um einen Vermittler zwischen Ihnen und den Programmen, die Sie ausführen, sodass Sie Antworten erhalten, die Sie normalerweise eingeben müssten. Als Beispiel habe ich dieses Skript erstellt, um den Prozess des Druckens der logKext-Ausgabe zu automatisieren. Sie sollten alle Befehle erkennen, die Sie normalerweise für logkextClient selbst eingeben würden ...

#!/usr/bin/expect -f
spawn logkextClient
expect "logKext Password:"
send "mylogkextpassword\r"
expect "logKextClient > "
send "print\r"
expect "logKextClient > "
send "quit\r"
close

In 10.5 und 10.6 funktionierte dies gut für die Ausgabe des logKext-Ausdrucks, sodass ich ihn in eine E-Mail umleiten und senden konnte. Allerdings habe ich dieses als root angemeldete Terminal ausgeführt, so dass es einfach war.

Theoretisch könnte man stattdessen sagen, wenn Sie nicht als root angemeldet wären

#!/usr/bin/expect -f
spawn sudo -k logkextClient
expect "Password:"
send myrootpassword\r
expect "logKext Password:"
send "mylogkextpassword\r"
expect "logKextClient > "
send "print\r"
expect "logKextClient > "
send "quit\r"
close

(Beachten Sie, dass ich sudo -kabsichtlich konsistent war und jedes Mal ein Passwort benötigte)

Sie können also Ihren bevorzugten Befehlszeileneditor verwenden, um dieses Skript zu erstellen, einen Befehl auszuführen chmod +xund es zum Starten auf das Dock zu ziehen ... Theoretisch.

Aber ich hatte Probleme damit, dass Mavericks / usr / bin / dazu gebracht hat, sich mit sudo richtig zu verhalten, so dass dies in anderen Skripten nicht so funktioniert, wie es sollte. Und ich habe logKext sowieso nicht mehr zum Testen installiert.

Aber ich denke, das ist die Richtung, in die du gehen möchtest.

Viel Glück!

Adam
quelle
0

Sie können Automator verwenden, um dies zu tun. Die Anweisungen gelten für Mavericks, aber der Hauptteil ist in allen Betriebssystemen gleich.

  1. Öffnen Sie Automator
  2. Klicken Sie auf "Neues Dokument"
  3. Wählen Sie "Workflow"
  4. Klicken Sie auf "Aufzeichnen" (möglicherweise werden Sie dazu aufgefordert, die Erlaubnis zu erteilen. Klicken Sie auf "Systemeinstellungen öffnen".)
  5. Führen Sie alle gewünschten Aktionen aus
  6. Klicken Sie auf die Stopp-Schaltfläche
  7. Speichern Sie den Workflow

Wenn Sie nun diese Aktionen ausführen möchten, öffnen Sie einfach den Workflow.

Rajiv
quelle
Cool. Ich werde es versuchen und in einer Minute auf Sie zurückkommen. Funktioniert die gespeicherte Automator-Datei auf einem anderen Computer? Ich arbeite manchmal unterwegs an meinem Macbook und die Passwörter können unterschiedlich sein.
Sommersprossen
@Freckles Wenn sich Ihr Benutzerpasswort zur Authentifizierung für Sudo-Berechtigungen unterscheidet, müssen Sie den Workflow neu aufzeichnen, da Automator genau das ausführt , was Sie von ihm verlangen. Wenn Sie beispielsweise hghghghhg als Kennwort eingeben und den Arbeitsablauf auf einem anderen Computer ausführen, sagt das Terminal "Kennwort falsch", weil Automator hghghghhg eingegeben hat.
Rajiv
@CompuKid .. Automator macht nicht das, was ich mir wünsche oder ist eher nicht die passende Lösung. Die Position meines Desktops kann zu jeder Tageszeit anders sein, und "watch me do" schlägt fehl. Ich werde Automator erkunden und sehen, was ich tun kann. Ansonsten sollte vielleicht ein Shell-Skript funktionieren?
Sommersprossen
2
Zusätzlich zu der obigen Antwort - wenn Sie etwas mit Passwörtern automatisieren möchten ( was Sie normalerweise nicht sollten! ), Möchten Sie vielleicht erwarten . Sie können es mit Homebrew oder den anderen Paketmanagern bekommen.
Bdecaf
@Freckles ja, ich denke ein Shell-Skript würde besser funktionieren. Diese Option habe ich nicht gesehen.
Rajiv
0

Ich schlage vor, AppleScript zu verwenden. Ich bin nicht in der Lage, den eigentlichen Code anzugeben, nur eine Idee.

a) Starten Sie das Terminal: http://smallbusiness.chron.com/use-applescript-launch-programs-48829.html

b) Terminal anweisen, den Befehl auszuführen: https://stackoverflow.com/questions/1870270/sending-commands-and-strings-to-terminal-app-with-applescript

c) Erteilen der Terminal-Superuser-Berechtigung: https://discussions.apple.com/message/23354237#23354237

Ich bin mir nicht sicher, ob sich (b) und (c) perfekt mischen lassen.

d) Schließen Sie das Textbearbeitungsfenster / -dokument: https://stackoverflow.com/questions/10933711/how-to-open-close-and-close-dialogs-of-other-application- using-cocoa- or-a

Shane Hsu
quelle