シェルスクリプトでカレントディレクトリを取得する方法

目次

スポンサードリンク

シェルスクリプトでカレントディレクトリを取得する方法を解説します。 カレントディレクトリを取得するコマンドに pwd コマンドがありますが、シェルスクリプト内部で pwd コマンドを実行すると、実行方法によって結果が異なってきます。

シェルスクリプト自身が置いてあるディレクトリを取得する

シェルスクリプト自身が置いてあるディレクトリは、以下コマンドで取得します。この方法なら実行方法にかかわらずディレクトリを取得することができます。

$(cd $(dirname $0);pwd)

dirname コマンドを使用すると、ファイルパスのパス部分を返してくれます。**シェル変数 $0 **には、実行しているシェルスクリプト自身のパスが格納されており、dirname コマンドを使用してそのパスのパス部分のみを取得します。

ただし、$0 は、実行する際のパスの指定方法により内容が異なります。そのため、一度、$cd コマンドでシェルスクリプトが置いてあるディレクトリに異動した上で、pwd コマンドを実行しています。

サンプルコード

以下サンプルコードを実行すると、単純に pwd コマンドの結果を取得した場合と上記コマンドの2種類を比較できます。

#!/bin/bash

# pwd コマンドの実行結果を変数に格納する
pwd=$(pwd)

# シェルスクリプト自身が置いてあるディレクトリを変数に格納する
script_dir=$(cd $(dirname $0);pwd)

echo "pwd is $pwd"
echo "script_dir is $script_dir"

上記シェルスクリプトを、/tmp 配下に、test.sh として保存しておきます。/tmp で ./test.sh で実行した場合と、他のディレクトリからフルパスで指定した場合だと以下のように pwd コマンドの結果が異なることが分かります。

[root@hostname tmp]# ./test.sh
pwd is /tmp
script_dir is /tmp

[root@hostname tmp]# cd /root/
[root@hostname ~]# /tmp/test.sh
pwd is /root
script_dir is /tmp


シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。

Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 icon