bash を介して OS X でアプリケーションをエイリアスする正しい方法は何ですか?

bash を介して OS X でアプリケーションをエイリアスする正しい方法は何ですか?

私の には~/.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、このようなエイリアスは作成されません。

これを行う正しい方法は何ですか?

答え1

エイリアスは設計上、シェル スクリプトでは機能しません。そうしないと、たとえばalias rm='rm -i'ほとんどのシェル スクリプトが壊れてしまいます。

とにかく有効にするには、expand_aliasesシェル オプションを設定します。


これらの実行可能ファイルへのソフトリンクを次のディレクトリに作成できます$PATH:

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

次に、新しいコマンド名 (例: ) を入力してaquamacs、コマンドを実行します。

これにより、シェルに依存せずにこれらのコマンドを使用できるようになります。


通常の OS X アプリケーションの場合、非ブロッキングな方法でアプリケーションを開くにはopen -a ProgramName、たとえば をopen -a Aquamacs使用します。これは、Launch Services のプログラム データベース (たとえば、特定のファイルをデフォルト以外のエディターで開くためのプログラムの選択肢を提供するもの) を使用し、アプリケーションがインストールされている場所を認識します。

答え2

これは正しい方法ですが、達成したいこととは異なる「it」の値を使用するだけです。(エイリアスは、基本的に対話型の使用のみを目的としています。)

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 "$@"; }

答え3

簡単な解決策は、次のコマンドを追加することです.bash_profile

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

これにより、RStudioプログラムは.Rコマンドに渡された既存のファイルを開くことができるようになります。

答え4

python3.6フォルダー内に次の実行可能ファイルがあるとします。

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

そうすると、次のことができます:

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

/./最後に注意してください、

関連情報