Qual é a maneira correta de criar alias de aplicativos no OS X por meio do bash?

Qual é a maneira correta de criar alias de aplicativos no OS X por meio do bash?

No meu ~/.bashrc, tenho vários aliases 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"'

Não creio que esta seja a forma correcta de o fazer. Os aliases não funcionam em scripts bash e, ao instalar algo por meio de brewou apt-get, ele não cria um alias como este.

Qual é a maneira correta de fazer isso?

Responder1

Aliases não funcionam em shell script por design. Caso contrário, por exemplo, alias rm='rm -i'quebrará a maioria dos scripts de shell.

Para ativá-los de qualquer maneira, defina a expand_aliasesopção shell.


Você pode criar softlinks para esses executáveis ​​em um diretório no seu $PATH:

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

Em seguida, basta digitar o novo nome do comando, por exemplo aquamacs, para executá-los.

Isso permitirá o uso desses comandos independentemente do seu shell.


Observe que, para aplicativos normais do OS X, uma maneira sem bloqueio de abri-los é open -a ProgramName, por exemplo open -a Aquamacs, . Ele usa o banco de dados de programas do Launch Services (aquele que fornece, por exemplo, a seleção de programas para abrir um determinado arquivo com um editor não padrão) e sabe onde os aplicativos estão instalados.

Responder2

Essa é a maneira certa de fazer isso, apenas por um valor de "isso" diferente do que você deseja alcançar. (o alias é apenas para uso interativo, basicamente.)

A maneira de abrir um pacote de aplicativos no Mac é usar open -a ${appname}, então você pode/deve substituir seu alias emacs por alias emacs='open -a aquamacs', e seu inkscape por open -a wine '/Users/hpek/.wine/...'.

A maneira como você tem um emacsbinário diretamente executável, porém, é ter algo chamado literalmente assim no seu arquivo $PATH. Tenho tendência para scripts minúsculos:

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

Isso abre o aplicativo no modo "mac", passa todos os argumentos da linha de comando por ele e é executável a partir de qualquer coisa, incluindo outros processos.

Porém, se você se preocupa apenas com o shell, as funções do shell são mais "normais" que os aliases, pois podem ser acionadas em mais circunstâncias no bash:

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

Responder3

Uma solução simples é adicionar o seguinte comando em .bash_profile:

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

Isso permitirá que o programa RStudio abra qualquer .Rarquivo existente passado para o comando

Responder4

Digamos que eu tenha um executável chamado python3.6dentro da pasta:

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

Então eu posso fazer:

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

AVISO /./no final,

informação relacionada