9

基本的な考え方は、リンクが複数のマシンで機能することを確認したいので、$ HOME変数を明示的に展開するのではなく、$HOMEに相対的なパスにリンクしたいということです。

私がする時

ln -s ~/data datalnk

/home/user/dataのユーザーがいる1台のマシンのディレクトリと、のユーザー$HOMEがいる別のマシンのディレクトリに転送する必要があります。/home/user/home/machine/user/data$HOME/home/machine/user/data

2台目のマシンでシンボリックリンクを作成できません

ln -s /home/machine/user /home/user

私にはそれを行う権限がなくlink、2台のマシンのディレクトリ階層が異なるため、相対パスを使用できないためです。

これを修正または回避するための可能な方法に関するアイデアはありますか?

編集:

私が実際に伴おうとしているのは、2つのマシンで同じリンクを機能させることです。ターゲットは、絶対パスではなく、リンクへの相対パスではなく、$/HOMEへの相対パスのみに関して同じディレクトリを持っています。また。

4

3 に答える 3

7

tl、drそれは動作しません

一重引用符などのエスケープメカニズムを使用して、シンボリックリンクに~ 入ることができます。

> cd ~
> echo hello > a    
> ln -s '~/a' b

ただし、~これはシェル拡張であり、ファイルシステムでは理解されません(実際には、ファイルシステムにとっては「単なる別の文字」です)。~これは良いことです-一般的に$HOME?によって決定されるように、ファイルシステム層に環境変数について知ってもらいたいです。

> ls -l b
lrwxrwxrwx    1 root     root             3 Oct 27 17:39 b -> ~/a
> ls b
ls: b: No such file or directory 

(で行われるように)上記のシンボリックリンクエントリを「手動で」見ることはできls -lますが、それはプログラム(Windowsの「.LNK」を考えてください)によって不透明な方法で行われる必要があります。ご覧のとおり、ファイルシステムはを理解していません~

幸せなsh'ing。

于 2011-10-27T17:47:22.453 に答える
2

まず第一に、直接行うことはできません。シンボリック リンクはプレーン テキスト ファイルであり、拡張子は実行されません。参照している場所への固定の相対パスまたは絶対パスを定式化できない場合、その場所にシンボリック リンクすることはできません。

適切なディレクトリへのリンクを適切な場所に配置するスクリプトを作成できますが、最適な方法はアプリケーションによって異なります。

于 2011-10-27T17:37:14.150 に答える
1

この方法でシンボリック リンクを動的にする唯一の方法は、絶対パスではなく相対パスを使用することです。つまり、パスを で始めないでください/

例えば:

cd
ln -s data datalnk

~/datalnk実行時に、アプリまたはスクリプトはまたはを参照する必要があります$HOME/datalnk

あなたは何を達成しようとしているのかを本当に語っていないので、私があなたの問題を解決しているのか、それとも別の方法で取り組む必要があることを提案しているのか、私にはわかりません.

于 2011-10-27T17:35:50.977 に答える