Bashスクリプトを使用して現在のディレクトリを変更しますか? [コピー]

Bashスクリプトを使用して現在のディレクトリを変更しますか? [コピー]

bashスクリプトでシェルディレクトリを変更できますが、サブシェルだけでなくディレクトリの変更を保持することが可能かどうか疑問に思います。

cdbashスクリプト内で実行すると、ディレクトリはサブシェル内でのみ変更され、終了すると元のディレクトリに戻ることがわかります。

しかし、特定のディレクトリに移動するコマンドを実行したいと思います。エイリアスを使用できますが、エイリアスを作成する必要があるサブディレクトリがたくさんあります。

答え1

いいえ、スクリプトは別のシェルで実行され、これは親エントリには影響しません。ただし、パラメータで関数を使用できるため、エイリアスよりも柔軟です。別のオプションは、sourceまたはそれに対応するを使用してファイルをインポートすることです.。ただし、これは引数を受け入れません。それでも現在のシェルには影響します。これら2つの機能を組み合わせてインポートしたいファイルに機能を配置し、現在のプロセスでこの機能を使用できます。

答え2

CDPATHおそらくシェル変数のようなものを探しているでしょう。

変数はコマンドCDPATHのように機能します。PATHcd

設定は次のようになります

CDPATH=".:~:~/projects:~/music"

お話させていただきます

cd ricky_martin

どこでも、どこか(おそらく)という名前のサブディレクトリが見つかるまで、値で:- で区切られたディレクトリパスを順次巡回し、そこから検索します。$CDPATHricky_martin~/music/ricky_martincd

同様に

cd world_domination

~/projects/world_dominationそのようなサブディレクトリがある場合は、そのディレクトリに移動できます。現在のディレクトリにも存在する場合は、そのディレクトリがより早く表示されるため(最初の場所の点が)world_domination最初に選択されます。$CDPATH

することも許可されます。

cd proj1/tests

~/projects/proj1/testsそのようなディレクトリがどこに存在するかを取得します(現在のディレクトリまたはホームディレクトリに存在しない限り、上記の値を$CDPATH使用)。proj/tests

CDPATH一部のスクリプトに重大な混乱を招く可能性があるため、シェル変数をエクスポートしないでください。

この変数はマニュアル()CDPATHで説明されています。bashman bash

CDPATH

コマンドの検索パスですcd。これは、シェルがコマンドで指定されたターゲットディレクトリを見つけるためのコロンで区切られたディレクトリのリストですcd。サンプル値はです ".:~:/usr"

関連情報