Perché bash echo invece di eseguire Apple Script

0

Ho una funzione nel mio .bash_profile che dovrebbe consentirmi di aggiungere elementi di avvio. L'unico problema è che questa echo è una stringa invece di eseguire lo script Apple.

Questa è la mia funzione

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
}

Quando eseguo addtologin /Users/iProgram/Applications Spotify hidden , emette login item ${2} .

Perché è questo? Perché non aggiunge Spotify agli elementi di Login?

Se è d'aiuto, ecco il mio .bash_profile pieno in caso di problemi (non credo che sia)

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

Se aiuta, ho ricevuto l'osScript da qui

    
posta iProgram 07.09.2015 - 15:32
fonte

1 risposta

2

Il problema sono le virgolette singole in osascript -e '...' . Le virgolette singole impediscono l'espansione variabile. Ciò significa che ${2} rimane ${2} invece di essere sostituito con Spotify per esempio.

Prova questo:

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
}

Qui utilizziamo le virgolette che consentono l'espansione. Per non confonderli con le citazioni interne, dobbiamo sfuggire a quelli con \ .

Ora eseguendo il comando con Spotify verrà visualizzato login item Spotify . Questo è solo il risultato di AppleScript, è stato creato un elemento di accesso. Per sopprimere ciò è possibile aggiungere >/dev/null al comando: osascript -e "tell ..." >/dev/null .

    
risposta data 07.09.2015 - 19:07
fonte

Leggi altre domande sui tag