Python の MacPorts バージョンがインストールされているときに、Sublime Text 3のコマンドで発生していた問題の回避策を見つけました。説明では、/bin にあるコマンド ライン アプリへのsubl
ソフト リンクを配置するように指示されています。ln-s
それはうまくいかなかったので、 ~/.profile を開いてエイリアスを追加しました:
alias subl="/Applications/path/to/subl"
。しかし、それは私に新たな疑問を投げかけます。エイリアス リンクとソフト リンクの 2 つの違いは何ですか?
7 に答える
Alias はMacintosh Finder の概念です。Finder でエイリアスを作成すると、Finder はそれを追跡します。元のファイルまたはフォルダーを移動すると、エイリアスがそれに続きます。
シンボリック リンクは、Unix ファイル システムの概念です。シンボリック リンクを作成すると、それは単に元の場所を指すだけです。オリジナルを移動すると、シンボリック リンクはどこにも指しなくなります。
Mac アプリケーションを使用し、[開く/保存] ダイアログ ボックスを使用すると、Finder API が使用され、Finder がエイリアスの追跡を処理するため、エイリアスが処理されます。
Unix ツールは Finder API と統合されていないため、エイリアスを追跡できません。ただし、シンボリック リンクを処理する基礎となる Unix API で動作します。ls
Unix APIを使用しているため、シンボリックリンクで使用できます。パイソンと同じ。
System 7/8/9 の時代には、Windows API がシンボリック リンクではなくショートカットを使用するように、ファイル システムはシンボリック リンクを処理できませんでした。エイリアスが必要でした。
ただし、Mac OS X は Unix ベースの OS であるため、シンボリック リンクの概念を理解しています。Finder は、シンボリック リンクをエイリアスと同様に扱うようになりました (ただし、オリジナルが移動してもシンボリック リンクは更新されません)。エイリアスを使用する唯一の理由は、古い Finder ファイル システムとの互換性を維持するためです。
これらはまったく別のものですが、この場合は同様の目的に使用できます。
これ:
alias subl="/Applications/path/to/subl"
はエイリアスを作成するためsubl
、シェル コマンドとして入力することは、 を入力することと同じ/Applications/path/to/subl
です。
bash では、エイリアスよりも関数の方がはるかに柔軟で強力であるため、通常はエイリアスよりも関数の方が好まれます。
subl() { /Applications/path/to/subl ; }
これらはどちらもシェルに固有のものです。シェルがsub1
指定されたコマンドに展開されます。
ln -s
一方、ファイル システムにシンボリック リンクを作成します。シンボリック リンクは別のファイルへの参照であり、ほとんどの場合、ファイル自体であるかのように扱うことができます。シェルだけでなく、それにアクセスするすべてのものに適用され、システムで実行されているすべてのプロセスにすぐに表示され、削除されるまで持続します。(シンボリック リンクは、ターゲット ファイルの名前を含む小さな特殊ファイルとして実装されます。)
上記のエイリアスコマンドに何かが欠けている可能性があると思います-それはフォームを持っている必要があり、alias mumble="substitution"
mumble で始まる入力したコマンドはすべて置換に置き換えられます。そのため、プロファイルに入力したものがalias subl="/Applications/path//to/subl"
、コマンドの開始時に subl と入力するたびに、フル パスに置き換えられます。
ln
ファイルシステム内にあるものから別のものへの参照を作成することによって機能します。
上記のリンクln
は、MacPorts で提供されている Python のバージョンでは機能しないことを示唆しています。
EDIT:別のコメントは、私が話しているエイリアスがMac固有の「ファインダー」エイリアスであることに気づきましたが、ここで問題となっているエイリアスはbashの「シェル」エイリアスです。私の間違い。
シンボリック リンクまたはソフト リンクは、パス (ファイル システム上の場所) を指します。パスにあるファイルまたはフォルダーが移動または名前変更された場合、ソフト リンクは役に立たない場所を指すようになります。
エイリアスには、実装に応じて、パス、ファイル ID、またはその両方への参照を含めることができます。少なくとも Mac OS X では、デフォルトは both ですが、パスはファイル ID より優先されます。つまり、エイリアスが参照するパスに何かが存在する限り、シンボリック リンクと同じように、エイリアスはパスを指します。ただし、エイリアスが参照するパスに何も存在しない場合は、代わりに元のファイル ID を指します。
例えば:
ファイルを作成し、ファイル パスを指定してエイリアスを作成するとします。エイリアスには、ファイルのパスだけでなく、ファイルのファイル ID も含まれるようになりました。デフォルトでは、エイリアスはファイルのパスをたどってファイルに移動します。
ファイルを別の場所に移動すると、エイリアスはファイルのファイル ID を参照してそれに続きます。ただし、新しいファイルを古いファイルと同じファイル パスに割り当てると、ファイル ID よりもパスが優先されるため、エイリアスは新しいファイルを指すようになります。
参照: http://forums.macworld.com/index.php?/topic/142842-aliases-vs-symbolic-links/