相対パスから絶対パスを得る
相対パスを絶対パスに変換する一般的な方法は用意されていない
相対パスの前にカレントディレクトリを付け足し.や..を処理することで
絶対パスに変換しています。
#!/bin/sh #relpath2abs.sh if [ -z "$1" ]; then echo "Usage: reopath2abs.sh path" exit 1 fi #引数が/で始まっているか調べる #exprの引数に/1文字を指定すると割り算記号と間違えられて #エラーになるので、前に余分な文字xを置いている if [ `expr x"$1" : x'/'` -ne 0 ]; then rel="$1" else rel="$PWD/$1" fi abs="/" IFS='/' #相対パスの要素について繰り返す for comp in $rel; do case "$comp" in #/./ // → / '.' | '') continue ;; #..の場合絶対パスの最後の要素を取り除く '..' ) abs=`dirname "$abs"` ;; #その他の場合要素を絶対パスの最後に追加 * ) [ "$abs" = "/" ] && abs="/$comp" || abs="$abs/$comp" ;; esac done echo "$abs"
$ pwd; ./relpath2abs.sh ../ /home/anmino /home