Estoy intentando escribir un alias de bash para Chromium en mi Mac OSX. Funciona cuando no está en un script de alias de bash, pero no funciona cuando intento crear un alias.

Probé estos comandos en mi terminal, uno tras otro:

cd /Applications/Chromium.app/Contents/MacOS/
./Chromium --pro-server="socks5://localhost:1234
cd -

Luego, intenté poner todo esto en un comando de alias en mi secuencia de comandos .bash_profile:

alias launch_chromium='cd /Applications/Chromium.app/Contents/MacOS/; ./Chromium --pro-server="socks5://localhost:1234" ; cd -'

Ahora, cuando lanzo bash de esta manera: bash --login, obtengo

unexpected EOF while looking for matching `''

Y, cuando copio y pego exactamente lo que hay en el comando alias en la terminal, y funciona perfectamente: L

cd /Applications/Chromium.app/Contents/MacOS/; ./Chromium --pro-server="socks5://localhost:1234" ; cd -

¿Qué estoy haciendo mal?

2
makansij 14 dic. 2016 a las 20:15

2 respuestas

La mejor respuesta

La definición de alias publicada en su pregunta no explica su síntoma; debería funcionar.

Sin embargo, su problema se resuelve mejor con una función de shell en lugar de un alias:

launch_chromium() ( 
 cd /Applications/Chromium.app/Contents/MacOS/
 exec ./Chromium --pro-server="socks5://localhost:1234" "$@"
)

Tenga en cuenta cómo:

  • ( ... ) se usa para encerrar el cuerpo de la función, lo que hace que se ejecute en una subshell , lo que evita la necesidad de volver al directorio de trabajo anterior.

  • exec se usa para la eficiencia: reemplaza la subcapa con el proceso Chromium, ya que la subcapa ya no es necesaria. Consejo del sombrero para Charles Duffy para este y el siguiente punto.

  • Se agrega "$@" para pasar argumentos potenciales.

El uso de una función tiene dos ventajas importantes:

  • Invocarlo es un comando único , mientras que su alias comprende múltiples comandos, lo que conduce a un comportamiento inesperado en las canalizaciones, por ejemplo.

  • Una función puede aceptar argumentos , a diferencia de un alias.

3
Community 23 may. 2017 a las 12:17

No es necesario cambiar el directorio de trabajo.

alias launch_chromium='/Applications/Chromium.app/Contents/MacOS/Chromium --pro-server="socks5://localhost:1234"'
2
chepner 14 dic. 2016 a las 17:37