Mengapa bash menggemakan alih-alih menjalankan Apple Script

0

Saya memiliki fungsi di saya .bash_profileyang memungkinkan saya untuk menambahkan item startup. Satu-satunya masalah adalah gema ini bukan string yang menjalankan Apple Script.

Ini adalah fungsi saya

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
}

Ketika saya menjalankannya addtologin /Users/iProgram/Applications Spotify hiddenoutput login item ${2}.

Kenapa ini? Mengapa tidak menambahkan Spotify ke item Login?

Jika ini membantu, ini adalah .bash_profilepemetikan penuh saya yang menyebabkan masalah (jangan pikir itu)

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

.warna

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'

Jika itu membantu, saya dapat naskahnya dari sini

iProgram
sumber

Jawaban:

2

Masalahnya adalah tanda kutip tunggal di osascript -e '...'. Kutipan tunggal mencegah ekspansi variabel. Ini berarti bahwa ${2}tetap ${2}bukannya diganti dengan Spotifymisalnya.

Coba ini:

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
}

Di sini kami menggunakan tanda kutip ganda yang memungkinkan untuk ekspansi. Untuk tidak membingungkan mereka dengan kutipan batin kita perlu melarikan diri dari mereka \.

Sekarang menjalankan perintah dengan Spotifyakan keluar login item Spotify. Ini hanya hasil dari AppleScript, item masuk telah dibuat. Untuk menekan ini Anda dapat menambahkan >/dev/nullke perintah: osascript -e "tell ..." >/dev/null.

Arthur
sumber