GNU/Linux >> Linux の 問題 >  >> Linux

Linuxコマンドラインナビゲーションのヒント/コツ3-CDPATH環境変数

このシリーズの最初のパートでは、cd-について説明しました。 コマンドの詳細と、第2部では、プッシュについて詳しく調べました。 およびpopd コマンドと、それらが役立つシナリオ。

コマンドラインナビゲーションの側面に関する説明を続けて、このチュートリアルでは、 CDPATHについて説明します。 わかりやすい例で環境変数。また、この変数に関連するいくつかの事前の詳細についても説明します。

ただし、先に進む前に、このチュートリアルのすべての例が、Bashバージョン4.3.11(1)を使用してUbuntu14.04でテストされていることを言及する価値があります。

CDPATH環境変数

コマンドラインでの作業に特定のディレクトリ(ホームディレクトリなど)ですべての操作を実行する必要がある場合でも、ディレクトリを切り替えるときに絶対パスを指定する必要があります。たとえば、私が / home / himanshu / Downloadsにいる状況を考えてみましょう。 ディレクトリ:

$ pwd
/home/himanshu/Downloads

また、要件は / home / himanshu / Desktopに切り替えることです。 ディレクトリ。これを行うには、通常、次のいずれかを実行する必要があります:

cd /home/himanshu/Desktop/

または

cd ~/Desktop/

または

cd ../Desktop/

次のコマンドを実行できれば簡単ではないでしょうか。

cd Desktop

はい、それは可能です。ここでCDPATH環境変数が使用されます。この変数を使用して、 cdのベースディレクトリを定義できます。 コマンド。

その値を出力しようとすると、このenv変数がデフォルトで空であることがわかります:

$ echo $CDPATH
$

ここで、これまで説明してきたケースを考慮して、この環境変数を使用して / home / himanshuを定義しましょう。 cdコマンドのベースディレクトリとして。

これを行う最も簡単な方法は次のとおりです。

export CDPATH=/home/himanshu

そして今、私は以前はできなかったことを、 / home / himanshu / Downloads内から実行できます。 ディレクトリで、cdデスクトップを実行します コマンドは正常に実行されます。

$ pwd
/home/himanshu/Downloads
$ cd Desktop/
/home/himanshu/Desktop
$

これは、 / home / himanshuの下の任意のディレクトリにCDを挿入できることを意味します。 / home / himanshuを明示的に指定せずに または または../ (または複数の ../ )cdコマンドで。

注意点

これで、CDPATH環境変数を使用して、 / home / himanshu / Downloadsと簡単に切り替えられる方法がわかりました。 from / to / home / himanshu / Desktop 。ここで、 / home / himanshu / Desktopの状況を考えてみましょう。 ディレクトリには、 Downloadsという名前のサブディレクトリが含まれています 、そしてそれはあなたが切り替えるつもりの後者です。

しかし、突然、cdデスクトップを実行していることに気付きました。 / home / himanshu / Desktopに移動します 。したがって、それが起こらないようにするには、次のようにします。

cd./ダウンロード

前述のコマンド自体には問題はありませんが、特にそのような状況が発生するたびにこれを行う必要があることを考えると、それはあなたの側の余分な努力です(少しでもそうかもしれませんが)。この問題のより洗練された解決策は、元々CDPATH変数を次のように設定することです。

CDPATH ="。:/ home / himanshu"

をエクスポートします

これは、cdコマンドに、最初に現在の作業ディレクトリでディレクトリを検索してから、 / home / himanshuを検索するように指示していることを意味します。 ディレクトリ。もちろん、cdコマンドをこのように動作させるかどうかは、好みや要件に完全に依存します。この点について説明する背後にある私の考えは、このような状況が発生する可能性があることを通知することでした。

これまでに理解したように、CDPATH env変数が設定されると、その値(またはそれに含まれるパスのセット)が、cdコマンドがディレクトリを検索するシステム上の唯一の場所になります(もちろん、次のシナリオを除く)。絶対パスを使用します)。したがって、コマンドの動作が一貫していることを確認するのは完全にあなた次第です。

次に、相対パスでcdコマンドを使用するbashスクリプトがある場合は、予期しない問題に巻き込まれて問題がない限り、最初にCDPATH環境変数をクリアまたは設定解除することをお勧めします。または、 exportを使用するのではなく ターミナルでコマンドを実行してCDPATHを設定すると、.bashrcで環境変数を設定できます。 インタラクティブ/非インタラクティブシェルをテストした後、ファイルを作成して、実行しようとしている変更がインタラクティブシェルにのみ反映されていることを確認します。

パスが環境変数の値に表示される順序も重要です。たとえば、現在のディレクトリが / home / himanshuの前にリストされている場合 、次にcdコマンドは、最初に現在の作業ディレクトリ内のディレクトリを検索し、次に / home / himanshuに移動します。 。ただし、値が "/ home / himanshu:。"の場合 その後、最初の検索は / home / himanshuで行われます。 その後、現在のディレクトリ。言うまでもなく、これはcdコマンドの動作に影響し、パスの順序を知らないと問題が発生する可能性があります。

CDPATH環境変数は、その名前が示すように、cdコマンドに対してのみ機能することを常に念頭に置いてください。これは、 / home / himanshu / Downloads内にいることを意味します ディレクトリでは、cdデスクトップを実行できます / 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~

ただし、すべての状況で回避策があるとは限りません。

もう1つの重要なポイント:ご存知かもしれませんが、CDPATH環境変数を設定してcdコマンドを使用すると、コマンドは、切り替え先のディレクトリのフルパスを出力に生成します。言うまでもなく、自分のマシンでcdコマンドを実行するたびに、すべての人がこの情報を知りたがるわけではありません。

この出力が確実に抑制されるようにするには、次のコマンドを使用できます。

alias cd='>/dev/null cd'

前述のコマンドは、cdコマンドが成功するたびに出力をミュートしますが、コマンドが失敗するたびにエラーメッセージを生成できるようにします。

最後に、CDPATH環境変数を設定した後、シェルのタブ補完機能を使用できないという問題が発生した場合は、bash補完をインストールして有効にしてみてください。詳しくはこちらをご覧ください。

結論

CDPATH環境変数は両刃の剣です。注意深く完全な知識を持って使用しないと、解決するのに貴重な時間を費やす可能性のある複雑な罠に陥る可能性があります。もちろん、それはあなたが決してそれを試してはいけないという意味ではありません。利用可能なすべてのオプションを評価し、CDPATHの使用が非常に役立つと判断した場合は、先に進んでそれを使用してください。

プロのようにCDPATHを使用していますか?共有するためのヒントが他にありますか?以下のコメントであなたの考えを共有してください。


Linux
  1. Linuxコマンドラインでパスワードを生成する

  2. Linuxコマンドラインに関する8つのヒント

  3. Linuxコマンドラインナビゲーションのヒント/コツ3-CDPATH環境変数

  1. Linuxコマンドラインナビゲーションのヒント:pushdおよびpopdコマンドの基本

  2. Linux環境変数のヒントとコツ

  3. Linuxコマンドラインナビゲーションを高速化するための7つのヒント

  1. Linuxコマンドラインで力を使用する

  2. Linuxコマンドラインで牛を飼う

  3. Linuxコマンドラインにアクセスしてください