使用これ.bashrc
回答、一般的に使用されているディレクトリに簡単に変更できるように、ファイルへのシンボリックリンクを作成しました。
例えば
ln -s ~/a/b/c/d/development dev
home
入力により、自分のディレクトリからディレクトリにディレクトリを変更できます。私のディレクトリから入ることもできますが、これも機能します。development
cd dev
ls dev
home
しかし、これらのコマンドはただ私のディレクトリで動作します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
スクリプトまたは関数(リンクを除く)を使用して目的の動作を取得できます。たとえば、シェルの初期化ファイル(~/.bashrc
bashの場合)に次の行を追加します。
dev(){
cd "$HOME"/dev
}
それ以外の場合:
alias dev='cd ~/dev'
今走るとdev
そこに行くことができます~/dev
。またはまたは~/bashrc
で変数を定義します~/.profile
。
dev="$HOME/dev"
これで実行してcd $dev
に移動できます~/dev
。これはいくつかの方法で達成できますが、リンクは関係ありません。