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 brew
ou 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_aliases
opçã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 emacs
biná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 .R
arquivo existente passado para o comando
Responder4
Digamos que eu tenha um executável chamado python3.6
dentro 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,