this answerを使用して、.bashrc
ファイルにシンボリックリンクを作成し、頻繁に使用するディレクトリへの変更を容易にしました。
例えば。
ln -s ~/a/b/c/d/development dev
cd dev
と入力すると、ディレクトリをhome
ディレクトリからdevelopment
ディレクトリに変更できます。 home
ディレクトリからls dev
を入力することもできますが、これも機能します。
ただし、これらのコマンドonlyは、私のhome
ディレクトリで機能します。他の場所から入力すると、No such file or directory
というエラーが表示されます。
cd ~/dev
またはls ~/dev
を入力すると、機能します。
誰かがそれがなぜであるか、そして私がそれを修正する方法を説明できるので、私が私の家のディレクトリにいないときにパスに~/
を含める必要はありません。
シェルとしてBashを使用しているため、CDPATH
シェル変数を使用できます。 バッシュマニュアル はそれを次のように説明しています
検索パス:CDPATH内の各ディレクトリ名でディレクトリが検索され、CDPATH内の代替ディレクトリ名はコロン( ‘:’)で区切られます。
.bashrc
に次の行を追加できます。
CDPATH=".:$HOME"
後でcd dev
と入力すると、現在の作業ディレクトリでdev
という名前のサブディレクトリが検索されます。
cd
組み込みコマンドが機能するため)。~
)を検索し、シンボリックリンクを見つけ(ディレクトリへのリンクであることを認識します)、ターゲットディレクトリ(~/dev
が指す)に移動します。ホームディレクトリ内のディレクトリを優先したい場合は、CDPATH
($HOME
)の最初に"$HOME:."
をリストすることができますが、それは-を壊すので、強くお勧めしません。 驚き最小の原則 :結果の動作は標準と大きく異なります。
できません。なんてことするんですか? ln
コマンドは、別のファイル(またはディレクトリなど)へのリンクであるファイルを作成します。その後、元のリンクであるかのようにリンクを使用できます。しかし、これはまだ単なるファイルです。特定のパスがあり、魔法のように浮かんでいるだけでなく、ファイルシステムのどこからでもアクセスできます。他のファイルと同じように、単に名前で呼び出すことはできません。そのパスを使用する必要があります。
通常のファイルを作成する場合と同じように:
$ cd ~/foo
$ touch file
$ cd ~/
$ ls file
ls: cannot access 'file': No such file or directory
$ ls ~/foo/file
file
リンクも例外ではありません。ランダムディレクトリからcd dev
を実行して、それが機能することを期待することはできません。ランダムディレクトリでcat file
を実行して、システムが必要なファイルを魔法のように認識することを期待することはできません。
スクリプトまたは関数を使用して目的の動作を取得できますが、リンクは使用できません。たとえば、次の行をシェルの初期化ファイル(bashの場合は~/.bashrc
)に追加します。
dev(){
cd "$HOME"/dev
}
あるいは単に:
alias dev='cd ~/dev'
ここで、dev
を実行すると、~/dev
に移動します。または、~/bashrc
または~/.profile
で変数を定義します。
dev="$HOME/dev"
これで、cd $dev
を実行して、~/dev
に移動できます。これは多くの方法で可能ですが、リンクは関係ありません。