¿Por qué bash se hace eco en lugar de ejecutar Apple Script?

0

Tengo una función en mi .bash_profile que debería permitirme agregar elementos de inicio. El único problema es que este eco es una cadena en lugar de ejecutar el Apple Script.

Esta es mi función

function addtologin(){
    if [ $3 = "hidden" ]; then
        osascript -e 'tell application "System Events" to make new login item at end with properties {path:"${1}/${2}.app", name:"${2}", hidden:true}'
    else
        osascript -e 'tell application "System Events" to make new login item at end with properties {path:"$1/$2.app", name:"$2", hidden:false}'
    fi
}

Cuando ejecuto addtologin /Users/iProgram/Applications Spotify hidden produce login item ${2} .

¿Por qué es esto? ¿Por qué no agrega Spotify a los elementos de inicio de sesión?

Si ayuda, aquí está mi .bash_profile en caso de que esté causando un problema (no creas que es)

.bash_profile

source .colors
export PS1=${BOLD}${CYAN}\W\ \A$\ ${DEFAULTCOLOR}
export SUDO_PS1=\W\ \A#\
export PATH=$PATH:/Users/iProgram/bin
export EDITOR=/usr/bin/vim

function ipaddress(){
    ifconfig en0 | awk '/inet / {print $2}'
}

function macaddress(){
    ifconfig en0 | awk '/ether/ {print toupper($2)}'
}

function wifi-off(){
    networksetup -setairportpower en0 off
}

function wifi-on(){
    networksetup -setairportpower en0 on
}

function wifi-connect(){
    networksetup -setairportnetwork en0 $1 $2
}

function nano(){
    vim $@
}

function home(){
    cd ~
}

function addtologin(){
    if [ $3 = "hidden" ]; then
        osascript -e 'tell application "System Events" to make new login item at end with properties {path:"${1}/${2}.app", name:"${2}", hidden:true}'
    else
        osascript -e 'tell application "System Events" to make new login item at end with properties {path:"${1}/${2}.app", name:"${2}", hidden:false}'
    fi
}

.colors

export BLACK='3[0;30m'
export RED='3[0;31m'
export GREEN='3[0;32m'
export BROWN='3[0;33m'
export BLUE='3[0;34m'
export PURPLE='3[0;35m'
export CYAN='3[0;36m'
export LIGHTGREY='3[0;37m'

export DARKGREY='3[1;30m'
export LIGHTRED='3[1;31m'
export LIGHTGREEN='3[1;32m'
export YELLOW='3[1;33m'
export LIGHTBLUE='3[1;34m'
export LIGHTPURPLE='3[1;35m'
export LIGHTCYAN='3[1;36m'
export WHITE='3[1;37m'

export DEFAULTCOLOR='3[0m'
export BOLD='3[1m'

Si ayuda, obtuve el osascript de aquí

    
pregunta iProgram 07.09.2015 - 15:32

1 respuesta

2

El problema son las comillas simples en osascript -e '...' . Las comillas simples impiden la expansión de variables. Esto significa que ${2} permanece ${2} en lugar de ser reemplazado con Spotify por ejemplo.

Prueba esto:

function addtologin(){
    if [ $3 = "hidden" ]; then
        osascript -e "tell application \"System Events\" to make new login item with properties {path:\"${1}/${2}.app\", name:\"${2}\", hidden:true}"
    else
        osascript -e "tell application \"System Events\" to make new login item with properties {path:\"${1}/${2}.app\", name:\"${2}\", hidden:false}" 
    fi
}

Aquí usamos comillas dobles que permiten la expansión. Para no confundirlos con las citas internas, necesitamos escapar de aquellos con \ .

Ahora, ejecutar el comando con Spotify generará login item Spotify . Esto es solo el resultado de AppleScript, se creó un elemento de inicio de sesión. Para suprimir esto, puede agregar >/dev/null al comando: osascript -e "tell ..." >/dev/null .

    
respondido por el Arthur 07.09.2015 - 19:07

Lea otras preguntas en las etiquetas