1 votos

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

Por lo general necesita una página de chrome abierto a localhost:3000 cuando estoy en vías de desarrollo. Así, sólo tengo que ejecutar el siguiente comando cmd: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --app=http://localhost:3000

Desde que uso con frecuencia y a veces mi puerto de cambios. Quiero escribir una función en zsh donde ch va a abrir chrome en localhost:3000 mientras ch 2500 va a abrir chrome en localhost:2500.

Hasta ahora, esto es lo que he conseguido:

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

De esta forma se abre un nuevo chrome ventana, 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 acaban de obtener un error: ch:1: no such file or directory: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --app=http://localhost:3000

2voto

user206746 Puntos 111

La razón por la que no funciona con el añadido de la bandera es la que se ha agregado la bandera dentro de las comillas dobles, esencialmente diciendo zsh que es parte del nombre del comando. La única razón por la cual son necesarias las comillas es que la ruta de acceso y el nombre de Google Chrome contener espacios en blanco. Espacios en blanco son utilizados por zsh (y cualquier otro shell de Unix) como separador entre palabras. Citando una cadena dice zsh que debe ser interpretada como una sola palabra, no importa cómo muchos de espacios en blanco (o de otros elementos sintácticos) están en él.

Una forma de hacerlo correctamente es:

ch () {
    "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --app=http://localhost:${1:-3000}
}
  • Aquí sólo el camino de Google Chrome que es citado, mientras que la bandera es independiente.
  • La palabra clave command no es necesario. Lo único que haría sería decirle a zsh el uso de un comando externo en lugar de una función o alias con el mismo nombre, que es más probable un riesgo que no aquí (El alias o la función tendría que ser nombrado "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome")
  • ${1:-3000} es sustituido por el primer parámetro ($1) pasó a ch. Si es indefinido o null-valor (por ejemplo, "") "3000" será sustituido en su lugar. Por lo que se ejecuta

    ch 2500
    

    va a abrir Chrome en http://localhost:2500, pero la ejecución de

    ch
    

    va a abrir Chrome en http://localhost:3000.

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