それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Linuxで相対パスを絶対パスに変換する。

Linuxにはパスの展開を出来るコマンドがあればいいなと思ったけど、Linuxシステムコールにはあるっぽいけど、コマンドにはないみたい。

Rubyワンライナーで解決。

ruby -e File.expand_path を応用してやればいい。

ワンライナーと組み合わせて一発でやろう。

takuya@air $ ruby -e 'puts File.expand_path(ARGV[0])'  /var/www/../ 
/var

コマンド作成。の紹介されているブログ

http://x68000.q-e-d.net/~68user/unix/pickup?realpath

これはC言語で実装する例。
面倒なのですよね。
rubyでも同じことが出来るんですけど。コマンドでどうやればいいですかね。っておもって調べたけど、面倒なので、ワンライナーでいいと思いました。

参考資料

#!/bin/sh
#↓自身のスクリプトの絶対パス(ファイル名無し)
echo $(cd $(dirname $0);pwd)
#↓自身のスクリプトの絶対パス(ファイル名有り)
echo $(cd $(dirname $0) && pwd)/$(basename $0)

path = ../../../hoge 
echo $(cd $(dirname $path);pwd)
echo basename $path
(Linux)シェルスクリプトで自身の絶対パスを取得したい : 3流プログラマのメモ書き

追記 2012-04-18 ブクマコメへ 返信

genzouw : realpathコマンドでよくね? / [linux]Linuxで相対パスを絶対パスに変換する。

realpathコマンドでもいいんだけど、realpathコマンドって最初から入ってないし。

インストールは

apt-get install realpath

で、出来る。全部のサーバーに入れるのは面倒だなと思った。