¿Cuál es la forma correcta de asignar alias a aplicaciones en OS X a través de bash?

¿Cuál es la forma correcta de asignar alias a aplicaciones en OS X a través de bash?

En mi ~/.bashrc, tengo varios alias como:

alias emacs='/Applications/Aquamacs.app/Contents/MacOS/Aquamacs'
alias octave='/Applications/Octave.app/Contents/Resources/bin/octave'
alias wine='/Applications/Wine.app/Contents/Resources/bin/wine'
alias simion='wine "/Users/hpek/.wine/drive_c/Program Files/SIMION 8.0/simion.exe"'
alias inkscape='wine "/Users/hpek/.wine/drive_c/Program Files/Inkscape/inkscape.exe"'

No creo que esta sea la forma correcta de hacerlo. Los alias no funcionan desde los scripts bash y, al instalar algo a través de brewo apt-get, no crea un alias como este.

¿Cuál es la forma correcta de hacer esto?

Respuesta1

Los alias no funcionan en el script de shell por diseño. De lo contrario, por ejemplo, alias rm='rm -i'romperá la mayoría de los scripts de shell.

Para habilitarlos de todos modos, configure la expand_aliasesopción Shell.


Puede crear enlaces suaves para estos ejecutables en un directorio en su $PATH:

ln -s /Applications/Aquamacs.app/Contents/MacOS/Aquamacs /usr/bin/aquamacs

Luego simplemente escriba el nuevo nombre del comando, por ejemplo aquamacs, para ejecutarlos.

Esto permitirá el uso de estos comandos independientemente de su shell.


Tenga en cuenta que para las aplicaciones OS X normales, una forma sin bloqueo de abrirlas es open -a ProgramName, por ejemplo open -a Aquamacs. Utiliza la base de datos de programas de Launch Services (la que, por ejemplo, proporciona la selección de programas para abrir un determinado archivo con un editor no predeterminado) y sabe dónde están instaladas las aplicaciones.

Respuesta2

Esa es la forma correcta de hacerlo, solo que con un valor de "eso" diferente al que desea lograr. (El alias es solo para uso interactivo, prácticamente).

La forma de abrir un paquete de aplicaciones en Mac es usar open -a ${appname}, por lo que podría/debería reemplazar su alias de emacs con alias emacs='open -a aquamacs'y su inkscape con open -a wine '/Users/hpek/.wine/...'.

Sin embargo, la forma de tener un emacsbinario directamente ejecutable es tener algo llamado literalmente así en su archivo $PATH. Tiendo a escribir guiones pequeños:

#!/bin/sh
exec /usr/bin/open -a octave "$@"

Eso abre la aplicación al modo "mac", pasa todos los argumentos de la línea de comando a través de ella y es ejecutable desde cualquier cosa, incluidos otros procesos.

Sin embargo, si solo le importa el shell, las funciones del shell son más "normales" que los alias, ya que pueden activarse en más circunstancias en bash:

function octave() { /Applications/Octave.app/.../bin/octave "$@"; }
function octave() { open -a octave "$@"; }

Respuesta3

La solución simple es agregar el siguiente comando en .bash_profile:

alias rstudio='open -a /Applications/RStudio.app/Contents/MacOS/RStudio "$@"'

Esto permitirá que el programa RStudio abra cualquier .Rarchivo existente pasado al comando

Respuesta4

Digamos que tengo un ejecutable llamado python3.6dentro de la carpeta:

/Users/doekewartena/.pyenv/versions/3.6.0/bin/

Entonces puedo hacer:

alias python36='/Users/doekewartena/.pyenv/versions/3.6.0/bin/./python3.6'

AVISO que /./al final,

información relacionada