回答:
この行を試してください:
readlink -f `which command`
command
が$PATH
変数にある場合、そうでない場合は、既知のパスを指定する必要があります。
-f
中間リンクターゲットが存在する限り、存在しない最終ターゲットへのパスを返します... -e
これを回避するために使用します。-e
最終ターゲットが存在しない場合はnullを返します。
-f
readlink: illegal option -- f
OSXでエラーが発生しました。削除しても問題ありませんでした。
greadlink
代わりに使用することもできます。
Linuxでは、readlink
シンボリックリンクの内容を読み取り、readlink -f
シンボリックリンク以外の何かを見つけるまで、シンボリックリンクからシンボリックリンクへのシンボリックリンクをたどります。
ただし、これはscpには必要ありません。scpは常にシンボリックリンクに従います(-p
可能な場合、ファイルの時間とモードを保持する以外はメタデータを無視して、常にファイルコンテンツをコピーします)。
メタデータscpが保存できるものとできないものに失望した場合は、rsyncを使用することをお勧めします。オプションを指定しないと、rsyncはメタデータを無視してファイルの内容をコピーします。一般的に使用されるオプション-a
は、すべての園芸品種のメタデータ(時間、シンボリックリンク、権限、所有権)を保持し、ACLやハードリンクなどのエキゾチックなメタデータを保持するオプションがあります。
私は、コマンドを使用しls
、stat
、readlink
。
/etc/localtime
例としてファイルを取る
[flying@lempstacker ~]$ ls /etc/localtime
/etc/localtime
[flying@lempstacker ~]$ ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 Aug 2 22:41 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
statを使用する
[flying@lempstacker ~]$ stat /etc/localtime
File: ‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
Size: 35 Blocks: 0 IO Block: 4096 symbolic link
Device: fd01h/64769d Inode: 272202388 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-11-23 09:00:59.999887800 +0800
Modify: 2016-08-02 22:41:26.090389904 +0800
Change: 2016-08-02 22:41:26.090389904 +0800
Birth: -
[flying@lempstacker ~]$ stat -c "%N" /etc/localtime
‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
readlinkを使用する
[flying@lempstacker ~]$ readlink /etc/localtime
../usr/share/zoneinfo/Asia/Shanghai
[flying@lempstacker ~]$ readlink -f /etc/localtime
/usr/share/zoneinfo/Asia/Shanghai
そのコマンドreadlink -f
が優れているようです。
-f、-canonicalize:指定された名前のすべてのコンポーネントのすべてのシンボリックリンクを再帰的にたどることにより、正規化します。最後のコンポーネントを除くすべてが存在する必要があります-から
man readlink
Statは次の情報を提供します。
$ stat current
File: `current' -> `/home/user/releases/build/'
...
どちらでもできます
readlink -f `which command`
または、Linuxで同様のものを入手できます
stat `which command` | grep File
これをスクリプトに追加する場合は、エラーを調べてください。symリンクが存在しない場合にエラーメッセージを表示したくない場合は、次のようにします
readlink -f "`which command`"
readlink -f 'which java'
私にはうまくいきませんでした。
しかし、これは:
readlink -f $(which java)
`
ないのでうまくいきませんでし'
たが、$()
とにかく良い練習です。
$()
より良い習慣であるかを説明するために時間を取ったなら、私は喜んで賛成するでしょう。
command
、これは非推奨です。カプセル化$($(command))ははるかに簡単で、特別なエスケープを必要としないため、$()を使用する方が適切です。それが好ましいです。最初の例では、通常のアポストロフィを使用しましたが、readlinkは名前にスペースを含む「which java」という名前のファイルを見つけようとしています。ただし、javaバイナリ実行可能パスを見つけるために、引数javaを使用してコマンドを呼び出します。
scp
バージョンはデフォルトでシンボリックリンクに従いますか?あなたは自分のものをチェックし、おそらく自分自身にいくつかの作業を保存すべきです。