bashエイリアスはパスになることができますか?

bashエイリアスはパスになることができますか?

bashエイリアスはパスになることができますか?

こんにちは。愚かな質問なのであらかじめごめんなさい。 Bashエイリアスを使用したときに奇妙な動作が見つかりました。

私の目標

解決策は、一般的に使用されるパスに対して短いbashエイリアスを使用してシェルでより簡単にナビゲートすることです。たとえば、uni私のデータドライブにマウントされているUniversity()フォルダにすばやく移動するために/mnt/databashエイリアスを使用しましたalias uni='/mnt/data/uni'。今、親ディレクトリにあり、実行する/mnt/datacd uni想像通りに動作します/mnt/data/uni

質問

ただし、別のドライブ(ルートディレクトリなど)にあり、同じコマンドを実行するとエラーが発生しますbash: cd: uni: No such file or directory。実行すると、bashがこれがディレクトリであることを「認識」するというuni出力が表示されます。bash: /mnt/data/uni: Is a directoryただし、何らかの理由で親ディレクトリにないディレクトリに移動するために、エイリアスをcd関数と一緒に使用することはできません。

cdそのコマンドをエイリアスに追加して読み込むと、エイリアスはalias uni='cd /mnt/data/uni'すべてのディレクトリに対して機能します。しかし、エイリアスのパスだけが異なる機能を使用できることを願っています。これで、このディレクトリで実行する操作の99%がナビゲーションにすぎないため、エイリアスを含めることができますcd。しかし、最も迷惑なのは、この場合、エイリアスがどのように機能するかを完全に理解していないことです。

私の質問

誰かが私のエイリアスがこのように機能する理由と、ここで何を見逃しているのかを説明できますか?エイリアスパスのみを使用するソリューションも便利です。

ありがとうございます!乾杯

ベストアンサー1

いいえ、エイリアスはパスにできません。あるいは、より正確に言えば、できることへの道です。エイリアスはコマンドとして実行されるため、alias uni=/bin/ls'これはコマンドへのパスであるため機能します。ただし、ディレクトリなので実行できないalias uni=/mnt/data/uniため機能しません。uni

入って動作する理由はという/mnt/dataサブディレクトリがあるからです。uniしたがって、cd uniそのディレクトリに移動するだけです。エイリアスはここでも呼び出されません。これはまったく関係ありません。シェルが見るのはコマンド(cd)とターゲット(ディレクトリuni)だけであり、エイリアス関数はまったく呼び出されません。

このようにディレクトリに簡単にアクセスできるようにするには、そのディレクトリを変数に設定します。ファイルに以下を追加します~/.bashrc

uni="/mnt/data/uni"

ファイルを保存して新しい端末を開くと、どこからでもcd "$uni"その端末に移動できます。/mnt/data/uni

おすすめ記事