Scrivi una funzione in zshrc che può prendere un parametro e può gestire i flag

1

Di solito ho bisogno di una pagina chrome aperta a localhost: 3000 quando sto sviluppando. Quindi, ho solo eseguito il seguente cmd: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --app=http://localhost:3000

Dal momento che lo uso spesso e talvolta la mia porta cambia. Voglio scrivere una funzione in zsh dove ch aprirà il cromo in localhost:3000 mentre ch 2500 aprirà il cromo in localhost:2500 .

Finora, questo è quello che sono riuscito a fare:

ch () {
    command "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
}

Si apre una nuova finestra di Chrome ma viene visualizzato un errore / avviso nella console: /Library/Caches/com.apple.xbs/Sources/AppleGVA/AppleGVA-9.1.12/Sources/Slices/Driver/AVD_loader.cpp: failed to get a service for display 3

Ma quando aggiungo un flag:

ch () {
    command "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --app=http://localhost:3000"
}

Non succede nulla e alla fine ottengo un errore: ch:1: no such file or directory: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --app=http://localhost:3000

    
posta user7579349 26.02.2017 - 17:05
fonte

1 risposta

2

Il motivo per cui non funziona con il flag aggiunto è che hai aggiunto il flag tra virgolette, dicendo essenzialmente zsh che fa parte del nome del comando. L'unica ragione per cui sono necessarie le virgolette è che il percorso e il nome di Google Chrome contengano spazi bianchi. Gli spazi bianchi sono usati da zsh (e qualsiasi altra shell Unix) come separatore tra parole . Quotare una stringa dice a zsh che dovrebbe essere interpretato come una singola parola, indipendentemente da quanti spazi bianchi (o altri elementi sintattici) ci siano dentro.

Un modo per farlo correttamente è:

ch () {
    "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --app=http://localhost:${1:-3000}
}
  • Qui viene indicato solo il percorso verso Google Chrome , mentre il flag è separato.
  • La parola chiave command non è necessaria. Direbbe solo zsh di usare un comando esterno invece di una funzione o alias con lo stesso nome, che probabilmente non è un rischio qui (l'alias o la funzione dovrebbe essere chiamata "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" )
  • ${1:-3000} è sostituito con il primo parametro ( $1 ) passato a ch . Se non è definito o ha un valore nullo (ad esempio "" ) "3000" verrà sostituito. Quindi in esecuzione

    ch 2500
    

    aprirà Chrome su http://localhost:2500 , ma in esecuzione

    ch
    

    aprirà Chrome su http://localhost:3000 .

risposta data 28.02.2017 - 16:45
fonte

Leggi altre domande sui tag