web-dev-qa-db-ja.com

2つの相対パスを使用してbashでシンボリックリンクを作成します

私の家には2つのディレクトリがあります:~/dir1~/dir2、最初のファイルは~/dir1/file.txt~/dir2からシンボリックリンクを作成する方法はありますか~/に移動しますが、そうでない場合はなぜですか?

~/を実行してみました:

$ ln -s ./dir1/file.txt ./dir2/file.txt

しかし、私が予想するように、それは結果のシンボリックリンクが効果的に~/dir1/dir2/file.txtを指すようにします。これは理にかなっていますが、私が実際に望んでいるものではありません。

私も試しました:

$ ln -s ./dir1/file.txt ../dir2/file.txt

どちらが返されますか:

ln: failed to create symbolic link `../dir2/file.txt': No such file or directory

これにより、~/dir2/file.txtを指すシンボリックリンク~/../dir1/file.txtが作成されると思います。

ですから、私の本当の質問はこれだと思います。lnに、存在しないと思われるファイルへのシンボリックリンクを強制することはできますか?

編集:私が達成しようとしていることをさらに明確にするために、ホームディレクトリから実行できる単一のコマンドが必要です。

pushd dir2/ && ln -s ../dir1/file.txt && popd

またはPython(これは私が欲しいものに最も近いものです):

echo "import os; os.symlink('../dir1/file.txt', './dir2/file.txt')" | python
2
nettux

あなたはどちらかを行うことができます

  1. 絶対パスを使用する

    $ ln -s ~/dir1/file.txt ~/dir2
    $ readlink dir2/file.txt 
    /home/terdon/dir1/file.txt
    
  2. 正しい相対パスを使用する

    $ ln -s ../dir1/file.txt dir2/
    $ readlink dir2/file.txt 
    ../dir1/file.txt
    

ユースケースによっては、一方が他方よりも優れている場合があります。相対パスを使用してリンクを作成する場合、パスターゲットに対して相対的である必要がありますであり、現在の場所に対してではないことを覚えておいてください。

2
terdon