Con la esperanza de que algunos se puede señalar lo que estoy haciendo mal. Después de mirar a través de varios hilos, además de un montón de experimentación, se siente como algo simple que está mal. Los hilos que he leído incluyen ¿Cómo puedo activar un Centro de Notificación la notificación de un AppleScript o secuencia de comandos de shell? y Cómo obtener una notificación cuando mi comandos se hace
Este script está diseñado para mínimamente técnico a los usuarios realizar el montaje de la onu y el montaje de las acciones. Ahora sólo es compatible con SMB, pero va a manejar NFS y otros remota de los montajes más tarde. Tenemos la restricción de que el usuario del sistema será la base de OS X instalación, por lo tanto no podemos instalar otras herramientas o bibliotecas.
El problema está apareciendo una ventana de notificación cuando se produce un evento, con el texto que incluye un espacio en el argumento pasado a la función. Si el argumento es sólo alfa/numérico, funciona bien.
Como punto de partida, estoy usando un trozo de código de randomor sobre Cómo obtener una notificación cuando mi comandos de hecho. El decir de comandos hace que sea mucho más fácil de decir cuando el script funciona, además, harán su agradable voz.
send_notify(){
cmd=$@
local $@ && say 'Completed!' && osascript -e "display notification \"Completed: $2\" with title \"$1\""
}
Mientras que no hay espacios en blanco en la cadena del argumento que se pasa de la función de llamada, tanto en el decir y la notificación de trabajo. Cuando hay un espacio en blanco en la cadena del argumento como de BARRAS "3" o en una variable que se pasa, el send_notify() la función devuelve un error.
Cuando se llama sin espacios en blanco, send_notify() funciona
send_notify "FOO" "BAR2" <<< This works
Esta falla debido a que el espacio en blanco
send_notify "FOO" "BAR 3" <<< This fails
./sharemount.sh: line 138: local: `37': not a valid identifier
Curiosamente, el decir, el comando también no se puede ejecutar.
Parte del problema es mi falta de comprensión ¿qué papel "$@" juega en este comando. Si alguien tiene una explicación, sería muy bienvenida.
A continuación es una de las diversas funciones en la secuencia de comandos tha llamar a la send_notify() función.
Pre_Mount_Check() {
Current_Share="$(df -t smbfs --output=source 2>/dev/null | sed '1d' | awk -F/ '{print tolower($NF)}')"
Current_MountPoint="$(df -t smbfs --output=target 2>/dev/null | sed '1d')"
logger -p Info "$DebugLog" "Sharemount:Pre_Mount_Check Checking to see if $Share_Path already exists"
if [[ (-z "$Current_Share") && (-z "$Current_MountPoint") ]]; then
logger -p Info "$DebugLog" "Sharemount:Pre_Mount_Check $Share_Path on $Mount_Point is not mounted, we will try to mount it"
return 0
elif [[ ( "$Current_Share" = "$Share_Name") && ( "$Current_MountPoint" = *"$Mount_Point"*) ]]; then
logger -p Info "$DebugLog" "Sharemount:Pre_Mount_Check $Share_Path already mounted, nothing to do, exiting"
echo "$Share_Path already mounted, nothing to do, exiting 1"
exit 0
elif
[[ ( "$Current_Share" = "$Share_Name") ]]; then
logger -p Warning "$DebugLog" "Sharemount:Pre_Mount_Check $Share_Path already mounted, on $Current_MountPoint, exiting"
echo "$Share_Path already mounted, on $Current_MountPoint, exiting 2"
send_notify "FOO" "BAR2" <<< This works
exit 36
elif [[ ( "$Current_MountPoint" = *"$Mount_Point"*) ]]; then
logger -p Warning "$DebugLog" "Sharemount:Pre_Mount_Check $Share_Name is already mounted on $Mount_Point exiting"
echo "$Share_Name is already mounted on $Mount_Point exiting 3"
send_notify "FOO" "BAR 3" <<< This fails
exit 0
fi
}
send_notify(){
cmd=$@
local $@ && say 'Completed!' && osascript -e "display notification \"Completed: $2\" with title \"$1\""
}