realpath という名前のプログラムが少なくとも 2 つあります。 :
- GNU coreutils に
readlink -fが含まれていなかった時代の古いプログラム .readlink -fを支持して非推奨になりました 、非常に多くのディストリビューションがそれを運ぶのをやめました. realpathGNU coreutils 8.15 で導入されたプログラム。これは古すぎて、Debian のスクイーズやウィージーにはなりません。これを書いている時点では、Debian 不安定版も同梱されていません。このプログラムはreadlink -fに非常に近いです .
何らかの理由で、realpath の動作を部分的にエミュレートするシェル関数があります。 .このエミュレーションは部分的です:シンボリック リンクで呼び出すと、シンボリック リンクをたどりません。
これはシェル関数であるため、おそらく .bashrc から、または経由でロードされます 、対話型シェルで実行されているコードでのみ使用できます。 Linux を実行していると仮定して、他のプログラムで使用できるようにする場合は、realpath をエミュレートするスクリプトを作成します。 :
#!/bin/sh
readlink -f -- "[email protected]"
(これは realpath をエミュレートしません のめったに使用されないコマンド ライン オプションです。)
スクリプト ファイルのスコープが異なり、rc で定義されたローカル関数やエイリアスにアクセスできないため、シェルでのみ機能します。 ファイル。そして realpath コマンドは実際にはシステムに存在しません。
realpath をインストールするか パッケージから、独自の関数を定義する (スクリプトの一部として、いくつかの例を確認してください) か、rc をソースします。 ファイルが定義されているスクリプト内のファイル (例:. ~/.bashrc ).
realpath をインストールする手順は次のとおりです。 存在しない場合:
- Ubuntu:
sudo apt-get install coreutils - OS X:
brew install coreutils
Ubuntu &Debian
Debian または Ubuntu では realpath のようです デフォルトでインストールする必要があります。最近の 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
次に VM で:
$ type -a realpath
realpath is /usr/bin/realpath
realpath の代わりに 、 readlink -f file も使用できます (または greadlink ) coreutils 提供 パッケージも。
realpath は実際のコマンドですか、それともスクリプトですか?どこから来ているのか調べてみます.
$ type -a realpath
私はこのツールに詳しくないので、通常のディストリビューションの一部ではない可能性があります。おそらく、Bash の $PATH に存在しない非標準の場所にインストールされている可能性があります。 ただし、ログイン環境の $PATH 内にあります .
いずれにせよ、上記の type コマンドは、コマンドがどこから来ているかを示します。その時点で、スクリプトで呼び出しているメソッドを次のように変更できます。
echo $(/path/to/realpath test.sh)
または、スクリプトの $PATH を修正します この非標準の場所も含まれるようにします。
シェル内の関数
シェル スクリプトを呼び出しても、環境の多くは呼び出されません。これについて考えると、これは非常に理にかなっています。なぜなら、一般に、ユーザーの環境が持つ可能性のあるすべての追加の荷物をスクリプトに持たせたくないからです。
どのソース ファイルがこの機能を提供しているかを判断してそれをソースするか、単純に Bash にログイン環境を組み込むように指示することができます。
#!/bin/bash -l
echo $(realpath "$1")