realpath コマンドが見つかりません

realpath コマンドが見つかりません

Debianスクイーズamd64があります。私の現在のシェルはbashです。端末に以下を書くとうまくいきます。

$ uname -a
Linux core 2.6.32-5-amd64 #1 SMP Fri May 10 08:43:19 UTC 2013 x86_64 GNU/Linux
$ echo $SHELL
/bin/bash                                                                                                                                                                                     
$ echo $(realpath test.sh)                                                                                                                                                     
/home/ffortier/test.sh

私のtest.shファイルは次のとおりです。

#!/bin/bash
echo $(realpath "$1")

次のコマンドを実行しようとするとエラーが発生します。

$ ./test.sh test.sh 
./test.sh: line 2: realpath: command not found

bashファイルでrealpathコマンドを使用する方法は?

追加情報

$ type -a realpath
realpath is a function                                                                                                                                                                        
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"                                                                                                                                                                          
}           

ベストアンサー1

次のプログラムが複数ありますrealpath

  • 当時GNU coreutilsに含まれていなかった古いプログラムreadlink -fです。これで廃止されたため、readlink -f多くのディストリビューションではこのプログラムをサポートしていません。
  • このrealpathプログラムはGNU coreutils 8.15で導入されました。この記事を書いた時点では、Debian で圧縮するには古すぎます。Debian の不安定バージョンもこれを提供しません。。このプログラムは非常に近いですreadlink -f

何らかの理由で部分的にエミュレートされたシェル関数がありますrealpath。このエミュレーションは部分的です。シンボリックリンクから呼び出すと、シンボリックリンクに従わない。

これは、からまたはでロードできるシェル関数なので、.bashrc対話型シェルで実行されているコードにのみ適用されます。 Linuxを実行していると仮定して他のプログラムで使用できるようにするには、シミュレートされたスクリプトを作成しますrealpath

#!/bin/sh
readlink -f -- "$@"

realpath(これはほとんど使用されていないコマンドラインオプションをエミュレートしません。)

おすすめ記事