bashスクリプトでシェルディレクトリを変更できますが、サブシェルだけでなくディレクトリの変更を保持することが可能かどうか疑問に思います。
cd
bashスクリプト内で実行すると、ディレクトリはサブシェル内でのみ変更され、終了すると元のディレクトリに戻ることがわかります。
しかし、特定のディレクトリに移動するコマンドを実行したいと思います。エイリアスを使用できますが、エイリアスを作成する必要があるサブディレクトリがたくさんあります。
答え1
いいえ、スクリプトは別のシェルで実行され、これは親エントリには影響しません。ただし、パラメータで関数を使用できるため、エイリアスよりも柔軟です。別のオプションは、source
またはそれに対応するを使用してファイルをインポートすることです.
。ただし、これは引数を受け入れません。それでも現在のシェルには影響します。これら2つの機能を組み合わせてインポートしたいファイルに機能を配置し、現在のプロセスでこの機能を使用できます。
答え2
CDPATH
おそらくシェル変数のようなものを探しているでしょう。
変数はコマンドCDPATH
のように機能します。PATH
cd
設定は次のようになります
CDPATH=".:~:~/projects:~/music"
お話させていただきます
cd ricky_martin
どこでも、どこか(おそらく)という名前のサブディレクトリが見つかるまで、値で:
- で区切られたディレクトリパスを順次巡回し、そこから検索します。$CDPATH
ricky_martin
~/music/ricky_martin
cd
同様に
cd world_domination
~/projects/world_domination
そのようなサブディレクトリがある場合は、そのディレクトリに移動できます。現在のディレクトリにも存在する場合は、そのディレクトリがより早く表示されるため(最初の場所の点が)world_domination
最初に選択されます。$CDPATH
することも許可されます。
cd proj1/tests
~/projects/proj1/tests
そのようなディレクトリがどこに存在するかを取得します(現在のディレクトリまたはホームディレクトリに存在しない限り、上記の値を$CDPATH
使用)。proj/tests
CDPATH
一部のスクリプトに重大な混乱を招く可能性があるため、シェル変数をエクスポートしないでください。
この変数はマニュアル()CDPATH
で説明されています。bash
man bash
CDPATH
コマンドの検索パスです
cd
。これは、シェルがコマンドで指定されたターゲットディレクトリを見つけるためのコロンで区切られたディレクトリのリストですcd
。サンプル値はです".:~:/usr"
。