0 votos

Por qué bash se hace eco en lugar de ejecutar Apple script

Tengo una función en mi .bash_profile que debería permitirme añadir elementos de inicio. El único problema es que esto hace eco de 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 corro addtologin /Users/iProgram/Applications Spotify hidden produce login item ${2} .

¿Por qué? ¿Por qué no añade Spotify a los elementos de inicio de sesión?

Por si sirve de ayuda, aquí está mi versión completa .bash_profile en caso de que esté causando un problema (no creo que lo sea)

.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
}

.colores

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

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

export DEFAULTCOLOR='\033[0m'
export BOLD='\033[1m'

Si ayuda, obtuve el osascript de aquí

2voto

Forrest Voight Puntos 181

El problema son las comillas simples en osascript -e '...' . Las comillas simples impiden la expansión de las variables. Esto significa que ${2} sigue siendo ${2} en lugar de ser sustituido por 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í utilizamos las comillas dobles que permiten la expansión. Para no confundirlas con las comillas interiores debemos escapar de ellas con \ .

Ahora ejecutando el comando con Spotify se producirá login item Spotify . Este es sólo el resultado del AppleScript, se creó un elemento de inicio de sesión. Para suprimir esto se puede añadir >/dev/null a la orden: osascript -e "tell ..." >/dev/null .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X