Conversión de Automator Action en applescript para bash script

0

Acabo de escribir una aplicación Automator utilizando AppleScript (junto con un par de líneas de bash) para iniciar FTP con un solo clic. Sin embargo, se ejecuta más de un poco lento. Aquí está el código:

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

Esto es lo que hace el código:

  1. Comprueba si el servidor FTP se está ejecutando
  2. Si es así, apáguelo y abra un cuadro de mensaje que diga "sesión FTP cerrada"
  3. Si no, enciéndalo y lance un cuadro de mensaje que diga "sesión de FTP abierta" junto con mi dirección IP y nombre de usuario

Este script funciona a la perfección, pero como es demasiado lento, me pregunto si hay alguna forma de convertirlo en un script de shell bash. Eso debería acelerar mucho las cosas. ¿Alguna sugerencia?

    
pregunta TheLearner 28.07.2014 - 20:53

1 respuesta

2

No estoy seguro de entenderlo correctamente, si está en la tercera línea de su script. Está comprobando si el servicio ftp se está ejecutando. Puede usar el siguiente 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

Ejecuta esto un sudo . Explicación:

  • Para verificar si la tarea se está ejecutando, use launchctl list .
  • Para obtener la dirección IP rápidamente, use mi script perl (es posible que desee grep it diferentemente para deshacerse de las direcciones IP adicionales.
  • El único problema ahora es que la aplicación Finder no se presenta, pero se puede resolver si es necesario.
respondido por el Mateusz Szlosek 29.07.2014 - 14:01

Lea otras preguntas en las etiquetas