読者です 読者をやめる 読者になる 読者になる

実行ファイルのフルパスの取得

perl sh

会社の人に聞かれて強引な方法を提示してしまったで、
普通にできるだろってことで調べてみた。


Perl, シェルスクリプトどちらでも $0で実行ファイル名が
取得できます。それをフルパスにできればよいというわけです。


まあ basenameとか dirnameがあるんだったら abspathとかが
あるはずだって思って補完で出てくるかなって思ったんですが、
ありませんでした。basenameの manpageを見ると readlinkという
のが SEE ALSOにあります。で、これを調べてみると以下の通りで
フルパスが取得できます.

  % readlink -f ファイル名

しかし説明を読むとシンボリックリンクにコマンドみたいなので
使い方があってるのかが微妙ですね。さらに調べてみると, realpath
というコマンドがあって, 絶対パスを表示させる専門みたいです.

  % realpath ファイル名

両方のコマンドとも ".", ".."を考慮して除去してくれます。


なお Perlでは Cwdモジュールにある 'abs_path', 'realpath'という
関数で同じことが行えます

#!/usr/bin/perl
use strict;
use warnings;

use Cwd qw(abs_path realpath);

die "Usage abspath.pl [Filename]\n" if scalar @ARGV == 0;

my $filename = shift @ARGV;

print abs_path($filename), "\n";
print realpath($filename), "\n";

しかし会社の人は何にこのことを使うんだろ?そこまで
利用方法がわからないですね。得られた絶対パスからどこかを
見るとかそういうことなのかな。