bashエイリアスはパスになることができますか?
こんにちは。愚かな質問なのであらかじめごめんなさい。 Bashエイリアスを使用したときに奇妙な動作が見つかりました。
私の目標
解決策は、一般的に使用されるパスに対して短いbashエイリアスを使用してシェルでより簡単にナビゲートすることです。たとえば、uni
私のデータドライブにマウントされているUniversity()フォルダにすばやく移動するために/mnt/data
bashエイリアスを使用しましたalias uni='/mnt/data/uni'
。今、親ディレクトリにあり、実行する/mnt/data
とcd 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