Escriba una función en zshrc que puede tomar un parámetro y puede manejar banderas

1

Por lo general, necesito una página de Chrome abierta para localhost: 3000 cuando estoy desarrollando. Por lo tanto, acabo de ejecutar el siguiente cmd: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --app=http://localhost:3000

Ya que lo uso con frecuencia y, a veces, mi puerto cambia. Quiero escribir una función en zsh donde ch abrirá chrome en localhost:3000 mientras que ch 2500 abrirá chrome en localhost:2500 .

Hasta ahora, esto es lo que he logrado:

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

Esto abre una nueva ventana de Chrome pero muestra un error / advertencia en la consola: /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

Pero cuando agrego una bandera:

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

No pasa nada y me sale un error: ch:1: no such file or directory: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --app=http://localhost:3000

    
pregunta user7579349 26.02.2017 - 17:05

1 respuesta

2

La razón por la que no funciona con el indicador agregado es que agregó el indicador dentro de las comillas dobles, esencialmente diciendo a zsh que es parte del nombre del comando. La única razón por la que se necesitan comillas es que la ruta y el nombre de Google Chrome contienen espacios en blanco. Los espacios en blanco son utilizados por zsh (y cualquier otro shell de Unix) como separador entre palabras . Al citar una cadena, se indica a zsh que debe interpretarse como una sola palabra, independientemente de los espacios en blanco (u otros elementos sintácticos) que haya en ella.

Una forma de hacer esto correctamente es:

ch () {
    "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --app=http://localhost:${1:-3000}
}
  • Aquí solo se cita la ruta a Google Chrome , mientras que la bandera está separada.
  • La palabra clave command no es necesaria. Solo le diría a zsh que use un comando externo en lugar de una función o alias con el mismo nombre, que probablemente no sea un riesgo aquí (el alias o la función debería llamarse "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" )
  • ${1:-3000} se sustituye con el primer parámetro ( $1 ) pasado a ch . Si no está definido o tiene un valor nulo (por ejemplo, "" ), se sustituirá "3000" en su lugar. Así que corriendo

    ch 2500
    

    abrirá Chrome en http://localhost:2500 , pero en ejecución

    ch
    

    abrirá Chrome en http://localhost:3000 .

respondido por el Adaephon 28.02.2017 - 16:45

Lea otras preguntas en las etiquetas