Conversione dell'azione di automazione in applescript in bash script

0

Ho appena scritto un'app Automator utilizzando AppleScript (insieme a un paio di linee bash) per avviare FTP con un solo clic. Tuttavia corre più di un po 'lento. Ecco il codice:

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

Ecco cosa fa il codice:

  1. Controlla se il server FTP è in esecuzione
  2. Se sì, spegnilo e lancia una finestra di messaggio che dice "sessione FTP chiusa"
  3. Se no, accenderlo e lanciare una finestra di messaggio che dice "Sessione FTP aperta" insieme al mio indirizzo IP e nome utente

Questo script funziona come un incantesimo ma poiché è troppo lento, mi chiedo se c'è un modo per convertirlo in uno script di shell bash. Questo dovrebbe accelerare molto le cose. Qualche suggerimento?

    
posta TheLearner 28.07.2014 - 20:53
fonte

1 risposta

2

Non sono sicuro di aver capito correttamente - se nella terza riga del tuo script stai controllando se il servizio ftp è in esecuzione puoi utilizzare il seguente script:

#!/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

Esegui un sudo . Spiegazione:

  • Per verificare se il lavoro è in esecuzione, utilizza launchctl list .
  • Per ottenere rapidamente l'indirizzo IP usa il mio script perl (potresti voler grep in modo diverso per eliminare gli indirizzi IP aggiuntivi.
  • L'unico problema ora è che l'applicazione Finder non viene portata in primo piano, ma può essere risolta se necessario.
risposta data 29.07.2014 - 14:01
fonte

Leggi altre domande sui tag