私は私のホームフォルダ内の複数のディレクトリ間を絶えず移動する必要があることに気づき、それらを書くのに疲れました。私は伝統的にシンボリックリンクであるより速い方法を望んでいます。
しかし、私はホームディレクトリを何十ものシンボリックリンクに複雑にしたくありません。いくつかの~/links/
ディレクトリを作成して混乱させることができます。それシンボリックリンクがありますが、まだ醜いです。また、現在のディレクトリに移動するために毎日変更されるシンボリックリンク(.bashrcで定義)を作成したい場合があります。
ls
クイックナビゲーションリンクとして認識されますが、ホームディレクトリを実行しても実際には表示されず、現在のセッション以降も持続しないエントリを作成してシンボリックリンクのエイリアスを効果的に指定する方法はありますか?
答え1
シェルエイリアスには、(一部)名前補完を適用できる関数(通常はバインド)がありますtab。または、CDPATH
名前の完成をサポートするために「最近」(過去5〜6年以内)に改善されたこの機能を使用できます。これがうまくいけば、入力するものがニーモニックではなくディレクトリの実際の名前であるという利点があります。
バッシュマニュアルによると
CDPATH
検索パスとして使用するコロンで区切られたディレクトリのリストcd
組み込みコマンド。
追加資料:
答え2
頻繁にアクセスするが毎日変更されないディレクトリの場合、別のオプションはalias
ファイルにいくつかのコマンドを含めることです.bashrc
。
alias cdo="cd /u01/app/oracle"
alias cdw="cd /var/www/html"
友人は約50人を持っていて、私はすばやく簡単に持っています。ただ
cdo
ディレクトリを/u01/app/oracleに変更します。
答え3
タブ補完を使用できます。デフォルトでは、多くのLinuxディストリビューションでは、bashは[TAB]キーを押すと可能な一致項目のリストを取得します。 CDの場合、通常は現在の作業ディレクトリのサブディレクトリのリストです。これをオーバーライドできますが、代わりにjd
「ジャンプディレクトリ」などのエイリアスを作成することをお勧めします。
alias jd=cd
次に、jdの完成で目的の「ブックマーク」を定義します。より多くのオプション(コマンドまたは関数の結果を動的に自動生成することを含む)については、bashのマニュアルページを参照してください。しかし、最も簡単なのは次の単語のリストです-W
。
Full-W "/srv/www ~/tmp ~/work" jd
[TAB]と入力して押すとjd
「ブックマーク」が表示されます。不明な部分を入力し、[TAB]を押して終了します。 (上記では、~
sは私のホームディレクトリに展開されているので、最初の[TAB]は[TAB]をもう一度クリックすると入力される/
ディレクトリを提供します。)w
/srv/www
もちろん、~/.bash_profile
長く入れておいてください。
または、次のステップに進むこともできます。ディレクトリを作成します~/.shortcuts
。ドットから始めると、隠されてきれいで素敵なホームディレクトリが乱れません。そして、目的のディレクトリを指すシンボリックリンクでそのディレクトリを埋めます。それから入れてこれ~/.bash_profileから:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
_list_shortcuts
これは、名前リストを作成する関数で少し複雑な完成を定義し、単純なエイリアスではなく関数になるようにjd
します。なぜなら、関数は単純なエイリアスとは異なる動作をしたいからですcd
。この-P
フラグはcd
シンボリックリンクを解決し、すべてが透明な魔法になるようにします。ショートカット名がターゲットと一致する必要はありません。
だから:
$ ls -l ~/.shortcuts/
total 0
lrwxrwxrwx. 1 mattdm mattdm 16 Dec 17 19:44 tmp -> /home/mattdm/tmp
lrwxrwxrwx. 1 mattdm mattdm 17 Dec 17 19:44 WORK -> /home/mattdm/work
lrwxrwxrwx. 1 mattdm mattdm 8 Dec 17 19:44 www -> /srv/www
$ jd tmp
$ pwd
/home/mattdm/tmp
$ jd WORK
/home/mattdm/work
さらに効果を得るには、jd
引数なしで実行するときにすべてのショートカットを一覧表示します。
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
注:後者が私には適していないため、その理由を理解できないため、compgen -W $( cmd )
代わりに使用しています。compgen -C 'cmd'
これは私自身の新しい質問かもしれません。 :)
答え4
に変数として入れると~/.bashrc
消えます$
。
$ cat ~/.bashrc
if [ "$PS1" ]
then
export myproj=~/todays/fancy/project
fi
$ cd $myproj