シンボリックリンクを試してみると、いくつかの問題が発生します。 1つ目は、シンボリックリンクに関連付けられているディレクトリの代わりにディレクトリへのシンボリックリンクをたどった後に実際の作業ディレクトリを表示する方法です(pwd
たとえば、次のような場合)。 2番目は、シンボリックリンクではなく、ファイルシステムの物理ディレクトリに「バックアップ」する方法です。
答え1
あなたが望むものですpwd -P
。
man pwd
CentOS 6から:
-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 ..
必要に応じて使用することもできます。
答え2
man pwd
私のUbuntuから:
シェルに独自のバージョンの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`