シェルスクリプトやバッチを作成する際、外部ファイルを引数として指定して使用する事が多々ある。
その際、相対パスで外部ファイルを引数した後にcdコマンドを使用するとうまく動かないため、相対パスで引数とした外部ファイルをソース内で絶対パス(フルパス)に変換させる。
シェルスクリプトの場合
シェルスクリプトの場合は、以下のように記述をする事で相対パスを絶対パスに変換する事が出来る。
$(cd $(dirname "対象ファイルのパス") && pwd)/$(basename "対象ファイルのパス")
cdコマンドが入っているが、実際にかれんとディレクトリが変更される訳ではないので安心してもらいたい。
実際に使用する場合の例を以下に示す。
#!/bin/sh
FILE_PATH=$(cd $(dirname "$1") && pwd)/$(basename "$1")
echo $FILE_PATH
なお、この内容はこちらの記事を参考に記述させていただいた。
感謝!
バッチファイルの場合
バッチファイルの場合は、以下のように記述する事で絶対パスを取得する事ができる。
rem 引数1の場合
set 変数名=%~f1
rem 引数2の場合
set 変数名=%~f2
意外にも、シェルスクリプトよりバッチファイルの方が簡単に記述できるようだ。
PowerShellの場合
PowerShellの場合は、以下のように記述する。
Convert-Path 対象ファイルのパス