相対パスから絶対パスを取得する

Linux で realpath などが入っていない状況で 相対パスから絶対パスを取得するための シェルスクリプトです。

#!/bin/bash
# ==========================================================
#  絶対パス取得コマンド
#  -----------------------------------------------------
#  create : 2010/01/07 Studio ODIN
#  update :
# ==========================================================

# --- init ---------------------------------------------
COMMAND_NAME=fullpath
CUR_DIR=`pwd`

# -- args ----------------------------------------------
TARGET_OBJECT=$1

# -- args check ----------------------------------------
if [ "$TARGET_OBJECT" = "" ]; then
    pwd
    exit 0
fi
if [ ! -e "$TARGET_OBJECT" ]; then
    echo "Error: '$TARGET_OBJECT' is not exists." >&2
    exit 1
fi

# -- get full path (is directory) ----------------------
if [ -d $TARGET_OBJECT ]; then
    cd $TARGET_OBJECT
    pwd
    exit 0
fi

# -- get full path (is not directory) ------------------
cd `dirname $TARGET_OBJECT`
TARGET_PATH=`pwd`
TARGET_NAME=`basename $TARGET_OBJECT`
if [ "$TARGET_PATH" = "/" ]; then
    echo $TARGET_PATH$TARGET_NAME
else
    echo $TARGET_PATH/$TARGET_NAME
fi

# -- normal end ----------------------------------------
cd $CUR_DIR
exit 0

# ==========================================================
#  shell end
#  location: /usr/local/bin/fullpath
# ==========================================================

次の例は、fullpath という名前で /usr/local/bin に作成して実行権限を付けています。 環境に合わせて変更してください。

# cd /usr/local/bin
# vi fullpath
# chmod 755 fullpath

引数を指定しなければ、カレントディレクトリのパス、 ディレクトリやファイルを指定すれば、その絶対パスを返します。

$ fullpath
/home/odin

$ fullpath ../
/home

$ fullpath /
/

$ fullpath ../../vmlinuz
/vmlinuz

Google サイト内検索

Amazonアソシエイト