Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
23
Help us understand the problem. What is going on with this article?
@katoy

bash で ファイルの絶対パスを得る

More than 5 years have passed since last update.

bash で ファイルの絶対パスを得る必要があり、調査してみた。

参考

See

方法1

1.sh
#!/bin/bash
abspath=$(cd $(dirname $1) && pwd)/$(basename $1)
echo ${abspath}

実行例

$ ./1.sh 1.sh
/Users/katoy/tools/1.sh

$ ./1.sh /usr/local/bin/ack
/usr/local/bin/ack

$ ./1.sh /tmp
//tmp

/tmp となって欲しいけど, //tmp になってしまうなぁ ...

方法2

2.sh
#!/bin/bash
abspath=`greadlink -f $1`
echo ${abspath}

greadlink は brew install coreutils でインストールできる。

実行例

$ ./2.sh 2.sh
/Users/katoy/tools/2.sh

$ ./2.sh /usr/local/bin/ack
/usr/local/Cellar/ack/2.12/bin/ack

$ ./2.sh /tmp
/private/tmp

//tmp となることはない。 
/tmp でなく、シンボリックリンク先が得られる。 まあそのほうが都合が良いかもしれない。

方法3

すこし行数が多くなるけど。

3.sh
#!/bin/bash

# See http://unix.stackexchange.com/questions/101080/realpath-command-not-found
realpath ()
{
    f=$@;
    if [ -d "$f" ]; then
        base="";
        dir="$f";
    else
        base="/$(basename "$f")";
        dir=$(dirname "$f");
    fi;
    dir=$(cd "$dir" && /bin/pwd);
    echo "$dir$base"
}

echo $(realpath $1)

実行例

$ ./3.sh 3.sh
/Users/katoy/tools/3.sh

$ ./3.sh /usr/local/bin/ack
/usr/local/Cellar/ack/2.12/bin/ack

$ ./3.sh /tmp
/tmp

この方法では //tmp のようになることはない。

求む 他の実装

/tmp に対して /tmp が得られる簡単な実装は無いだろうか?
情報がえられれば、この投稿を編集して更新していきたいと思います。

23
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
katoy
就活中 (2013-03-01〜) java, ruby, nodejs, html5, unix, MacOS が使える技術者です。 (MacBookPro, 10.9.4 で作業してます。2014-01 から)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
23
Help us understand the problem. What is going on with this article?