Linux シェルスクリプトの基本 - シェルスクリプト内のディレクトリの変更 🐧↓
便宜上、現在の作業ディレクトリを別のディレクトリに変更するシェル スクリプトを実行する必要がある場合があります。
たとえば、ドキュメント ディレクトリ (~/Documents) に頻繁にアクセスし、そこにすばやく移動したい場合は、そのための Bash スクリプトを作成できます。
このスレッドでは、cd コマンドを使ってこれを行う方法を説明します。その過程で、cd コマンドの複雑な動作についてもいくつか説明します。
🐧 よくある問題 まずは、~/Documents ディレクトリに移動するスクリプトから始めましょう。ここでは https://t.co/C30eEhxKsc とします。
🐧 コードを詳しく説明します。 • cd /home/linuxopsys/Documents - 現在の作業ディレクトリを ~/Documents に変更します。 • pwd - 作業ディレクトリを出力します。 • echo $$ - $$ は、スクリプトを実行しているシェルのプロセス ID (PID) を含む Bash の内部変数です。
🐧 スクリプトの実行 ご覧のとおり、スクリプトを実行すると、期待どおりに /home/linuxopsys/Documents とシェルのプロセス ID が出力されます。
スクリプトが実行されたので、現在どこにいるかを確認しています。
ディレクトリが変更されていないことがはっきりと分かります。カレントディレクトリが/home/linuxopsys/Documentsに変更されていなかったため、このような状況は想定外でした。では、何が問題なのでしょうか?シェルのプロセスIDを見てみましょう。
現在実行中のシェルのプロセス ID (PID 4504) とシェル スクリプト (PID 4574) がまったく異なることがはっきりとわかります。
これは一般的な動作です。スクリプトは独立したシェル(サブシェル/子シェル)で実行されます。スクリプトの終了時に、この独立したシェルは終了し、現在実行中の親シェルはそのまま残ります。親シェルは影響を受けません。
問題は、この問題をどう解決するかです。それでは、読み進めてください。
🐧 親シェルでスクリプトを実行する source コマンドを使用すると、スクリプトが現在のシェル (親シェル) でコマンドを実行できるようになります。
sourceコマンドは、新しいシェルを起動するのではなく、現在のシェルコンテキスト内でコマンドを実行します。ドット演算子はsourceコマンドのショートカットエイリアスです(.)。素晴らしい!これで、現在のシェルでbashスクリプトを実行できます。試してみましょう。
上記のスニペットは、スクリプトの PID がそれを実行した親シェルの PID であり、親シェルの現在のディレクトリが ~/Documents になっていることを明確に示しています。
いいですね!ここまで、source を使って現在のシェルでシェルスクリプトを実行できることを示しました。あるいは、短縮形の . 演算子を使うこともできます。
🐧 Bash関数の活用 ディレクトリごとにBashスクリプトを書くのは面倒です。代わりに、複数のBashコマンドを1つのスクリプトにまとめることができます。
ここで、ファイルをソースすると、現在のターミナルでスクリプトの機能を使用できるようになります。
🐧 エイリアスの使用 組み込みの alias コマンドを使うと、Bash 関数をさらに改良できます。エイリアスは入力回数が少なくて済むため、関数よりも便利です。関数をエイリアスに変換してみましょう。
これまでのbash関数と比較すると、これがいかに簡潔であるかが分かります。さらに、エイリアスも関数と同じように使用できます。
以上です!このスレッドでは、Bash スクリプト内から cd コマンドを使用するいくつかの方法を説明しました。
まず、シェルスクリプトを実行すると独自のプロセスが開始されることを発見しました。最後に、関数とaliasコマンドがBashスクリプトの改善にどのように役立つかを確認しました。
ここまで読んでいただきありがとうございます。このスレッドがお役に立てば幸いです。フィードバックをいただければ幸いです。
このスレッドが気に入ったら、@linuxopsys をチェックしてください。Linux、システム管理者、DevOps について毎日ツイートしていきます。