ディレクトリのシンボリックリンクの変更は、ホームディレクトリでのみ機能します。

ディレクトリのシンボリックリンクの変更は、ホームディレクトリでのみ機能します。

使用これ.bashrc回答、一般的に使用されているディレクトリに簡単に変更できるように、ファイルへのシンボリックリンクを作成しました。

例えば

ln -s ~/a/b/c/d/development dev

home入力により、自分のディレクトリからディレクトリにディレクトリを変更できます。私のディレクトリから入ることもできますが、これも機能します。developmentcd devls devhome

しかし、これらのコマンドはただ私のディレクトリで動作しますhome。他の場所から入力するとエラーメッセージが表示されますNo such file or directory

私が入力cd ~/devしたりls ~/dev動作したら。

~/誰かがこれが起こる理由とそれを修正して、ホームディレクトリにないときにパスに含める必要がないことを説明できますか?

答え1

Bashをシェルとして使用しているので、CDPATHシェル変数を使用できます。これバッシュマニュアルそれを次のように描く

検索パス:CDPATHの各ディレクトリ名内のディレクトリを検索し、CDPATHでコロン( ':')で区切られた代替ディレクトリ名を使用します。

次の行を次の行に追加できます.bashrc

CDPATH=".:$HOME"

後で入力すると、cd dev現在の作業ディレクトリから次の名前のサブディレクトリが検索されますdev

  • そのようなディレクトリが存在する場合は、そのディレクトリに変更されます(cd組み込みコマンドが通常行うように)。
  • そうでない場合は、ホームディレクトリ(~)を検索し、シンボリックリンク(ディレクトリへのリンクであることを認識)を見つけて、宛先ディレクトリ(指す~/dev)に変更します。

ホームディレクトリ内のディレクトリの優先順位を指定するには、$HOMEまず()内にリストするだけですが、壊れるため、これを行わないことをお勧めします。CDPATH"$HOME:."最小の驚きの原理: 結果の振る舞いが標準から外れすぎます。

答え2

あなたはできません。どうすればいいですか?このlnコマンドは、他のファイル(またはディレクトリまたは他のファイル)へのリンクであるファイルを生成します。その後、元のリンクのようにリンクを使用できます。しかし、それでもファイルです。特定のパスがあり、魔法のように浮かぶわけではなく、ファイルシステムのどこからでもアクセスできます。他のファイルと同様に、単に名前で呼び出すことはできず、そのパスを使用する必要があります。

通常のファイルを生成するのと同じです。

$ cd ~/foo
$ touch file
$ cd ~/
$ ls file
ls: cannot access 'file': No such file or directory
$ ls ~/foo/file
file

リンクも変わりません。任意のディレクトリでcdを実行し、システムが目的のファイルを魔法のように知ることを期待できないcd devように、任意のディレクトリでcdを実行して動作するとは期待できません。cat file

スクリプトまたは関数(リンクを除く)を使用して目的の動作を取得できます。たとえば、シェルの初期化ファイル(~/.bashrcbashの場合)に次の行を追加します。

dev(){
    cd "$HOME"/dev
}

それ以外の場合:

alias dev='cd ~/dev'

今走るとdevそこに行くことができます~/dev。またはまたは~/bashrcで変数を定義します~/.profile

dev="$HOME/dev"

これで実行してcd $devに移動できます~/dev。これはいくつかの方法で達成できますが、リンクは関係ありません。

関連情報