Linux Tips · 1 min read · Jan 21, 2026
Linuxコマンドラインナビゲーションのヒント/トリック 3 - CDPATH環境変数
このシリーズの最初の部分では、cd -コマンドについて詳しく説明し、第二部では、pushdおよびpopdコマンドと、それらが便利になるシナリオを深く掘り下げました。
コマンドラインナビゲーションの側面に関する議論を続ける中で、このチュートリアルでは、わかりやすい例を通じてCDPATH環境変数について説明します。また、この変数に関連するいくつかの高度な詳細についても説明します。
** CDPATH環境変数
* コマンドライン作業が特定のディレクトリ、たとえばホームディレクトリの下で行われる場合でも、ディレクトリを切り替える際には絶対パスを指定する必要があります。たとえば、私は/home/himanshu/Downloads*ディレクトリにいるとします:
$ pwd
/home/himanshu/Downloadsそして、/home/himanshu/Desktopディレクトリに切り替える必要があります。これを行うには、通常、次のいずれかを実行する必要があります:
cd /home/himanshu/Desktop/または
cd ~/Desktop/または
cd ../Desktop/次のコマンドを実行するだけで済むなら、簡単ではないでしょうか:
cd Desktopはい、それは可能です。そして、ここでCDPATH環境変数が登場します。この変数を使用して、cdコマンドのベースディレクトリを定義できます。
その値を印刷しようとすると、この環境変数はデフォルトでは空であることがわかります:
$ echo $CDPATH
$これまで議論してきたケースを考慮し、cdコマンドのベースディレクトリとして/home/himanshuを定義するためにこの環境変数を使用しましょう。
これを行う最も簡単な方法は:
export CDPATH=/home/himanshuそして今、私は以前できなかったことを行うことができます - /home/himanshu/Downloadsディレクトリ内からcd Desktopコマンドを正常に実行できます。
$ pwd /home/himanshu/Downloads $cd Desktop/ /home/himanshu/Desktop $
これは、/home/himanshuの下の任意のディレクトリに、cdコマンドで/home/himanshuや~や../(または複数の../)を明示的に指定せずにcdできることを意味します。
注意すべき点
* これで、CDPATH環境変数を使用して/home/himanshu/Downloadsから/home/himanshu/Desktopに簡単に切り替える方法がわかりました。次に、/home/himanshu/DesktopディレクトリにDownloads*という名前のサブディレクトリが含まれている状況を考えてみましょう。そして、あなたが切り替えたいのは後者です。
しかし突然、cd Desktopを実行すると/home/himanshu/Desktopに行ってしまうことに気づきます。したがって、それが起こらないようにするために、次のようにします:
cd ./Downloads前述のコマンド自体には問題はありませんが、それはあなたの側での余分な努力です(どんなに小さくても)、特にそのような状況が発生するたびにこれを行う必要があることを考えると。これに対するより洗練された解決策は、CDPATH変数を次のように最初に設定することです:
export CDPATH=".:/home/himanshu"これは、cdコマンドに現在の作業ディレクトリ内で最初にディレクトリを探し、その後/home/himanshuディレクトリを検索するように指示していることを意味します。もちろん、cdコマンドがこのように動作するかどうかは、完全にあなたの好みや要件に依存します - この点について議論した理由は、このような状況が発生する可能性があることを知ってもらうためです。
今までに理解したように、一度CDPATH環境変数が設定されると、その値 - またはそれが含むパスのセット - は、cdコマンドがディレクトリを検索するシステム上の唯一の場所です(もちろん、絶対パスを使用するシナリオを除いて)。したがって、コマンドの動作が一貫していることを確認するのは完全にあなた次第です。
次に、相対パスでcdコマンドを使用するbashスクリプトがある場合は、CDPATH環境変数を最初にクリアまたは解除する方が良いでしょう。そうしないと、予期しない問題に陥る可能性があります。あるいは、CDPATHを設定するためにターミナルでexportコマンドを使用するのではなく、インタラクティブシェルと非インタラクティブシェルをテストした後に.bashrcファイルで環境変数を設定して、変更がインタラクティブシェルのみに反映されるようにすることができます。
環境変数の値に表示されるパスの順序も重要です。たとえば、現在のディレクトリが/home/himanshuの前にリストされている場合、cdコマンドは最初に現在の作業ディレクトリ内でディレクトリを検索し、その後/home/himanshuに移動します。しかし、値が“/home/himanshu:.”の場合、最初の検索は/home/himanshuで行われ、その後現在のディレクトリになります。言うまでもなく、これによりcdコマンドの動作に影響を与え、パスの順序を知らない場合は問題を引き起こす可能性があります。
CDPATH環境変数は、その名前が示すように、cdコマンドのみに機能することを常に念頭に置いてください。これは、/home/himanshu/Downloadsディレクトリ内にいるときにcd Desktopコマンドを実行して/home/himanshu/Desktopディレクトリに切り替えることができますが、lsを実行することはできないことを意味します。以下はその例です:
$ pwd
/home/himanshu/Downloads
$ ls Desktop
ls: cannot access Desktop: No such file or directory
$しかし、いくつかの簡単な回避策があるかもしれません。たとえば、次のように最小限の労力でやりたいことを達成できます:
$ cd Desktop/;ls
/home/himanshu/Desktop
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~しかし、すべての状況に対して回避策があるわけではありません。
もう一つの重要な点: あなたが観察したかもしれませんが、CDPATH環境変数が設定されているときにcdコマンドを使用すると、コマンドが切り替えるディレクトリのフルパスが出力に表示されます。言うまでもなく、すべての人が自分のマシンでcdコマンドを実行するたびにこの情報を持ちたいわけではありません。
この出力を抑制するために、次のコマンドを使用できます:
alias cd='>/dev/null cd'前述のコマンドは、cdコマンドが成功したときに出力をミュートしますが、コマンドが失敗したときにはエラーメッセージを表示します。
最後に、CDPATH環境変数を設定した後にシェルのタブ補完機能が使用できないという問題が発生した場合は、bash-completionをインストールして有効にすることを試みることができます - 詳細はこちら。
結論
CDPATH環境変数は二重刃の剣です - 注意深く完全な知識を持って使用しないと、解決に多くの貴重な時間を要する複雑な罠に陥る可能性があります。もちろん、それが決して試してはいけないという意味ではありません; 利用可能なすべてのオプションを評価し、CDPATHを使用することが大いに役立つと判断した場合は、ぜひ使用してください。
あなたはプロのようにCDPATHを使用していますか? 共有したい他のヒントはありますか? 下のコメントであなたの考えを共有してください。
**
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。