115

シェルスクリプトでよく使うパスの「エイリアス」を作ってみました。私は何かを試しましたが、失敗しました:

myFold="~/Files/Scripts/Main"
cd myFold

bash: cd: myFold: No such file or directory

どうすれば機能しますか?
ただし、cd ~/Files/Scripts/Main動作します。

4

10 に答える 10

90

シェルオプションがありますcdable_vars

cdable_vars
これが設定されている場合cd、ディレクトリではない組み込みコマンドへの引数は、値が変更先のディレクトリである変数の名前であると見なされます。

これをに追加できます.bashrc

shopt -s cdable_vars
export myFold=$HOME/Files/Scripts/Main

$HOMEチルダを;に置き換えたことに注意してください。引用符はチルダの展開を妨げ、Bash はディレクトリがないと文句を言い~/Files/Scripts/Mainます。

これで、次のように使用できます。

cd myFold

必要ありません$。実際、それが要点です。他の回答に示されているようにcd "$myFold"、シェルオプションなしで機能します。cd myFoldのパスにmyFoldスペースが含まれている場合にも機能します。引用符は必要ありません。

これは通常、 が設定されているかどうかをチェックする_cd関数としてタブのオートコンプリートでも機能しますが、すべての実装が同じ方法でそれを行うわけではないため、シェル オプションを設定するために編集する必要がある場合があります。bash_completioncdable_varsbash_completion.bashrc/etc/profile


Zsh ( ) など、他のシェルにも同様のオプションがありますcdablevars

于 2016-10-03T19:51:42.690 に答える
11

bash のハッシュテーブルに任意のパスを追加できます。

hash -d <CustomName>=<RealPath>

これで、できるようになりcd ~<CustomName>ます。永続的にするには、bashrcスクリプトに追加します。

このハッシュテーブルは、コマンドが実行されるたびにコンテンツを検索する必要がないように、bash にキャッシュを提供することを意図していることに注意してください。したがって、このテーブルは、キャッシュを無効にするイベント (変更など) でクリアされます$PATH

于 2016-10-03T19:23:56.260 に答える
5

$まず、質問のコードを機能させるには、「myFold」の値にアクセスする必要があります。

cd "$myFold"

これを簡単にするために、次のようにエイリアスを作成します~/.bashrc

alias cdmain='cd ~/Files/Scripts/Main'

.bashrcエイリアスを現在の bash セッションで使用できるようにするために、一度ソースを作成することを忘れないでください。

source ~/.bashrc

これで、次を使用してフォルダーに変更できます。

cdmain
于 2013-07-30T22:30:55.357 に答える
5

もう 1 つのオプションは、シンボリック リンクを使用することです。すなわち:

ln -s ~/Files/Scripts/Main ~/myFold

その後、次のような操作を に対して実行できます~/myFold

cp some_file.txt ~/myFold

これにより、ファイルが に配置されます~/Files/Scripts/Main。でいつでもシンボリック リンクを削除できますrm ~/myFold。これにより、元のディレクトリが保持されます。

于 2017-12-05T21:42:00.067 に答える