私が入力したとき、bashは私が入力したディレクトリ全体のパスへのショートカットとして特定のディレクトリに私を連れてcd ~foo
行きたいと思います。私はディレクトリからホームディレクトリにファイルをコピーできるようにしたいです。基本的に私はまったく同じことをしたいが、ディレクトリが何であるべきかを指定します。 [JFGIをしなければならないと確信していますが、FGを知りません。]foo
foo
cp ~foo/bar.txt ~/bar.txt
/foo/
~/
答え1
これを行うために使用する方法は、ショートカットを実行するディレクトリへのシンボリックリンクを持つディレクトリを作成し、そのディレクトリをCDPATHに追加することです。 CDPATHはディレクトリを変更したときに検索する場所を制御するため、cd
そのシンボリックリンクディレクトリがCDPATHにある場合は、cd
すべてのシンボリックリンクディレクトリにすぐに移動できます。
mkdir ~/symlinks
ln -s /usr/bin ~/symlinks/b
export CDPATH=~/symlinks
cd b # Switches to /usr/bin
もちろん、欠点は、現在のディレクトリに「b」というディレクトリがあると機能しないことです。そのディレクトリはCDPATHよりも優先されます。
私は一般的に「最初にシェルを切り替える必要があります」という答えが好きではありませんが、これは精密機能が存在しますZTE、代わりに使用したい場合に呼び出されます。名前ディレクトリ。変数をエクスポートしてそれをfoo
参照すると、~foo
値がにチェックされます$foo
。これは次のコマンドで使用できるため、特に便利ですcd
。
echo hi > /tmp/test
export t=/tmp
cat ~t/test # Outputs "hi"
答え2
ラッパー関数を作成してcd
「cd」と呼ぶことができます(最終的に関数はキーワードをbuiltin cd
使用してbuiltin
呼び出されます)。関数がこれを見るまで、Bashがコマンドラインで拡張しないプレフィックス文字を使用できます。これは、「:」などのディレクトリ名の最初の文字として表示される可能性が低くなります。より強力にしたいかもしれませんが、以下は簡単な概要です。
# format: [semicolon] shortcut colon destination [semicolon] ...
export CDDATA='foo:/path/to/foo;bar:/path/to/bar;baz:/path/to/baz'
cd () {
local dest=$1
if [[ $dest == :* ]]
then
[[ $CDDATA =~ (^|;)${dest:1}:([^;]*)(;|$) ]]
dest=${BASH_REMATCH[2]}
fi
if [[ -z $dest ]]
then
cd
else
builtin cd "$dest"
fi
}
cd :bar # pwd is now /path/to/bar
答え3
バッシュと一緒に:
~foo
ユーザーfooのホームディレクトリ用に予約されています。便宜上、ユーザーを作成することはお勧めできません。
あなたの人生をより簡単に(またはより難しくする)ことができます。ディレクトリの変更環境変数を設定しますCDPATH
(参照bash(1)
)。
それ以外に私が考えることができる唯一の方法は、短縮したいディレクトリに環境変数を設定することです。
$ FOODIR=/var/lib/misc
$ cp ~/bar.txt $FOODIR
答え4
~c
1つの方法は、目的のパスに置き換えてcdのエイリアスを作成することです。または単にzshを使用してください;)