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
(これはほとんど使用されていないコマンドラインオプションをエミュレートしません。)
答え2
スクリプトファイルの範囲が異なり、次に定義されるローカル関数とエイリアスにアクセスできないため、これはシェルでのみ機能します。RC文書。そして、realpath
そのコマンドは実際にはシステムには存在しません。
realpath
そのため、パッケージからインストールするか、独自の機能を定義してください(スクリプトの一部として一部を確認してください)。はい)またはソースRCスクリプトでそれを定義するファイルです. ~/.bashrc
。
realpath
存在しない場合は、次の手順に従ってインストールしてください。
- Ubuntu:
sudo apt-get install coreutils
- オペレーティングシステム:
brew install coreutils
Ubuntuとダーバン
realpath
DebianやUbuntuではデフォルトでインストールする必要があるようです。最近Debian 8(Jessie)を確認してみると、デフォルトでcoreutils
インストールされているようです。
新しいVMイメージでテストします。
$ vagrant init debian/jessie64 && vagrant up --provider virtualbox && vagrant ssh
$ vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh
次に、仮想マシンで次の操作を行います。
$ type -a realpath
realpath is /usr/bin/realpath
これに加えて、パッケージが提供する(または)realpath
を使用できます。readlink -f file
greadlink
coreutils
答え3
realpathは実際のコマンドかスクリプトですか?どこから出てくるのか確認してみましょう。
$ type -a realpath
私はこのツールに慣れていないので、通常のディストリビューションの一部ではないかもしれませんが、Bashには存在しませんが、$PATH
ログイン環境の$PATH
。
それにもかかわらず、上記のtype
コマンドソースは、次のようにスクリプトでコマンドを呼び出す方法を変更できる場所に表示されます。
echo $(/path/to/realpath test.sh)
$PATH
または、この非標準の場所も含めるようにスクリプトを変更してください。
シェルの機能
シェルスクリプトを呼び出すと、ほとんどの環境は呼び出されません。考えてみると、通常、スクリプトがユーザーエクスペリエンスに存在する可能性のある追加の手荷物のすべてを含めたくないので、これは意味があります。
この機能を提供するソースファイルを確認してインポートするか、Bashにログイン環境をマージするように指示できます。
#!/bin/bash -l
echo $(realpath "$1")
答え4
$ sudo apt-get install realpath