Konvertieren von Automator Action in AppleScript in Bash-Script

0

Ich habe gerade eine Automator-App mit AppleScript (zusammen mit ein paar Bash-Zeilen) geschrieben, um FTP mit einem einzigen Klick zu starten. Es läuft jedoch mehr als ein bisschen langsam. Hier ist der Code:

set ftpstatus to "off"
try
    do shell script "echo \"QUIT\" | telnet 127.0.0.1" & " ftp 2>&1 | grep  \"Escape character is\" > /dev/null"
    set ftpstatus to "on"
on error
    set ftpstatus to "off"
end try
if (ftpstatus = "off") then
    set ipaddr to IPv4 address of (get system info)
    set sun to short user name of (get system info)
    do shell script "sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges
    tell application "Finder" to display alert "FTP Launched and ready for file-transfer" & character id 8233 & character id 8233 & character id 8233 & "Address: ftp://" & ipaddr & ":21" & character id 8233 & "User Name: " & sun
else
    do shell script "sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges
    tell application "Finder" to display alert "FTP session closed"
end if

Der Code bewirkt Folgendes:

  1. Überprüfen Sie, ob der FTP-Server ausgeführt wird
  2. Wenn ja, schalten Sie es aus und werfen Sie eine Nachricht mit der Aufschrift "FTP-Sitzung geschlossen"
  3. Wenn nein, schalten Sie es ein und werfen Sie eine Nachricht mit der Aufschrift "FTP-Sitzung geöffnet" zusammen mit meiner IP-Adresse und meinem Benutzernamen

Dieses Skript funktioniert wie ein Charm, aber da es zu langsam ist, frage ich mich, ob es eine Möglichkeit gibt, es in ein Bash-Shell-Skript zu konvertieren. Das sollte die Dinge viel beschleunigen. Irgendwelche Vorschläge?

TheLearner
quelle

Antworten:

2

Ich bin nicht sicher, ob ich es richtig verstehe - wenn Sie in der dritten Zeile Ihres Skripts prüfen, ob ftp Dienst läuft Sie können folgendes Skript verwenden:

#!/bin/bash                                                                                                                   

launchctl list | grep ftpd

if [ $? != 0 ]; then
    IPADDR=$(ifconfig -a | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | grep -v 127.0.0.1)
    launchctl load "/System/Library/LaunchDaemons/ftp.plist"
    osascript -e "tell application \"Finder\" to display alert \"FTP Launched and ready for file-transfer\" & character id 8233 & character id 8233 & character id 8233 & \"Address: ftp://\" & \"$IPADDR\" & \":21\" & character id 8233 & \"User Name: \" & \"$USER\""
else
    launchctl unload -w "/System/Library/LaunchDaemons/ftp.plist"
    osascript -e 'tell application "Finder" to display alert "FTP session closed"'
fi

Führen Sie dies ein sudo. Erläuterung:

  • Verwenden Sie, um zu überprüfen, ob der Job ausgeführt wird launchctl list.
  • Um die IP - Adresse schnell zu erhalten, benutze mein Perl - Skript (Du möchtest vielleicht grep es anders, um zusätzliche IP-Adressen loszuwerden.
  • Das einzige Problem ist jetzt das Finder App wird nicht in den Vordergrund gebracht, kann aber bei Bedarf behoben werden.
Mateusz Szlosek
quelle
Die Zuordnung zu IPADDR setzt voraus, dass es nur gibt ein aktive Netzwerkschnittstelle dabei localhost
nohillside
1
@ Matrix das ist richtig. Das habe ich in meiner Antwort erwähnt. Um eine bestimmte Schnittstelle zu erhalten, müsste das IP-Skript geändert werden.
Mateusz Szlosek
Upps, richtig, hat das nicht bemerkt
nohillside
1
@AmitSchandillia Sie können dieses Skript in den AppleScript-Editor einfügen und folgende Zeile hinzufügen: do shell script ... with administrator privileges Sie werden aufgefordert, Ihr Passwort einzugeben. Eine andere Möglichkeit besteht darin, eine Anwendung zu erstellen, mit der Ihr Skript gestartet wird sudo. Im Allgemeinen müssen ausführbare Dateien, die ordnungsgemäß im * .app-Bundle enthalten sind, Terminal nicht starten.
Mateusz Szlosek
1
Es ist also ein bisschen riskant, Apps mit erhöhten Rechten arbeiten zu lassen. Ich kann Ihnen jedoch beim Kompilieren der ObjC-Anwendung helfen, um bashscript zu starten. Möglicherweise versuchen wir, mit einer Eingabeaufforderung nach passowrd oder mit setuid / setgid nach etwas zu fragen. Hier einige Informationen zu Unterschieden: developer.apple.com/library/mac/documentation/security/…
Mateusz Szlosek