私の~/.bashrc
には、次のようないくつかのエイリアスがあります。
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"'
これが正しい方法だとは思いません。エイリアスはbashスクリプト内からは機能せず、brew
またはapt-get
を介して何かをインストールする場合、このようなエイリアスは作成されません。
これを行う正しい方法は何ですか?
エイリアスは、設計上、シェルスクリプトでは機能しません。それ以外の場合、例: alias rm='rm -i'
はほとんどのシェルスクリプトを壊します。
とにかくそれらを有効にするには、expand_aliases
シェルオプションを設定します。
これらの実行可能ファイルのソフトリンクは、$PATH
のディレクトリに作成できます。
ln -s /Applications/Aquamacs.app/Contents/MacOS/Aquamacs /usr/bin/aquamacs
次に、新しいコマンド名を入力します。例: aquamacs
、それらを実行します。
これにより、シェルとは関係なくこれらのコマンドを使用できるようになります。
通常のOSXアプリケーションの場合、それらを開くための非ブロッキング方法はopen -a ProgramName
であることに注意してください。 open -a Aquamacs
。 Launch Servicesのプログラムデータベース(デフォルト以外のエディターで特定のファイルを開くためのプログラムの選択を提供するデータベースなど)を使用し、アプリケーションがインストールされている場所を認識します。
それはあなたが達成したいものとは異なる「それ」の価値のためだけに、それを行う正しい方法です。 (エイリアスは、ほとんどインタラクティブに使用するためのものです。)
Macでアプリバンドルを開く方法はopen -a ${appname}
を使用することです。そのため、emacsエイリアスをalias emacs='open -a aquamacs'
に、inkscapeをopen -a wine '/Users/hpek/.wine/...'
に置き換えることができます。
ただし、直接実行可能なemacs
バイナリを作成する方法は、$PATH
に文字通り名前を付けたものを作成することです。私は小さなスクリプトを好む傾向があります:
#!/bin/sh
exec /usr/bin/open -a octave "$@"
これにより、アプリケーションが「mac」の方法で開き、すべてのコマンドライン引数が渡され、他のプロセスを含むあらゆるものから実行可能になります。
ただし、シェルのみを気にする場合、シェル関数はエイリアスよりも「通常」であり、bashでより多くの状況でトリガーできます。
function octave() { /Applications/Octave.app/.../bin/octave "$@"; }
function octave() { open -a octave "$@"; }
フォルダー内にpython3.6
という実行可能ファイルがあるとします。
/Users/doekewartena/.pyenv/versions/3.6.0/bin/
それから私はすることができます:
alias python36='/Users/doekewartena/.pyenv/versions/3.6.0/bin/./python3.6'
最後の/./
に注意してください。
簡単な解決策は、.bash_profile
に次のコマンドを追加することです。
alias rstudio='open -a /Applications/RStudio.app/Contents/MacOS/RStudio "$@"'
これにより、プログラムRStudioは、コマンドに渡された既存の.R
ファイルを開くことができます。