web-dev-qa-db-ja.com

ディレクトリへのシンボリックリンクを操作する方法

シンボリックリンクを試していますが、いくつかの問題が発生しています。 1つ目は、ディレクトリへのシンボリックリンクをたどって、シンボリックリンクに関するディレクトリではなく実際の作業ディレクトリを表示する方法です(たとえば、pwdを使用する場合)。 2つ目は、シンボリックリンクに戻るのではなく、ファイルシステムの実際のディレクトリに「バックアップ」する方法です。

1
dsaxton

私のUbuntuの_man pwd_から:

シェルには独自のバージョンのpwdがある場合があります

bashを使用します。単純なpwdコマンドは、シンボリックリンクに関するパスを提供します。それでも_/bin/pwd_は実際のパスを返します。 cdコマンドもbashに組み込まれています。

言い換えると、これはシェル固有です。

編集:thrigのコメント(以下を参照)は、私がこの行の下に書いたすべてのものよりも優れた代替手段のようです。

実際のディレクトリに「バックアップ」するには、cd "$(/bin/pwd)/.."またはcd "$(/bin/pwd)"; cd ..を試してください。 2番目の形式は、cdのエイリアスを作成するように調整される可能性があります。

_alias cd='cd "$(/bin/pwd)"; cd'
_

同様の方法で、bash pwd組み込みを取り除くことができます。

_alias pwd=`/bin/pwd`
_
1

必要なのは_pwd -P_です。

CentOS 6の_man pwd_から:

_   -L, --logical
          use PWD from environment, even if it contains symlinks

   -P, --physical
          avoid all symlinks
_

または、BSD pwdのマニュアルページから、もう少しわかりやすい言葉で:

_ -L      Display the logical current working directory.

 -P      Display the physical current working directory (all symbolic
         links resolved).
_

「バックアップ」の意味は100%わかりませんが、「ディレクトリを現在のディレクトリの親に変更する」という意味だとすると、次のように使用できます。

_cd "$(dirname "$(pwd -P)")"
_

現在の作業パスにシンボリックリンクが含まれていない場合、これは_cd .._と同等です。

または、cd "$(pwd -P)"を使用して現在の論理ディレクトリの物理パスに移動し、必要に応じて_cd .._を使用することもできます。

3
Wildcard