シェルスクリプトの基礎 - パスの取得

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2020年7月14日 (火) 13:07時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == ここでは、シェルスクリプトで相対パスと絶対パスを取得する方法を記載する。<br> <br><br> == 相対パスの取得 == ディ…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

ここでは、シェルスクリプトで相対パスと絶対パスを取得する方法を記載する。


相対パスの取得

ディレクトリの相対パスを取得するには、dirname $0を使用する。
特殊変数$0には、現在実行しているシェルスクリプトの相対パスが格納されて、dirnameコマンドは引数に与えられたファイルのパスから、ディレクトリのパスを取得する。
逆に、basenameコマンドはファイル名を取得することができる。

例えば、以下のシェルスクリプトが/home/username/develop/test.shにあるとする。

 #!/bin/sh
 
 echo $0
 echo `dirname $0`
 echo `basename $0`


これを、ホームディレクトリ/home/usernameから実行すると次の結果になる。

develop/test.sh  ← $0 の結果
develop          ← dirname $0 の結果
test.sh          ← basename $0 の結果



絶対パスの取得

絶対パスを取得する場合、まず、pwdコマンド(環境変数$PWDを使用しても同じ)でシェルスクリプトを実行したディレクトリのパスを取得して、cd dirname $0で絶対パスを取得する。
cdを使用してディレクトリを移動した後、pwdで絶対パスを取得している。($(コマンド)または`コマンド`のコマンド置換を忘れないこと)
(コマンド置換はサブシェルで実行されるので、元の環境には影響を与えない)

 #!/bin/sh
 
 echo $(cd $(dirname $0) && pwd)


# 実行
sh develop/test.sh

# 出力
/home/username/develop  ← $(cd $(dirname $0) && pwd)の結果


※注意
cdを使用する場合は、以下の内容に気を付けること。

 #!/bin/sh
 
 echo $(cd $(dirname $0) && pwd)
 # これ以降もcdされてない状態で実行される
 ...
 
 cd $(dirname $0)
 echo pwd
 # これ以降はcdされた状態で実行される
 ...