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