私が思うディレクトリが他の実際のディレクトリに接続されている場合をどのように検出しますか?

私が思うディレクトリが他の実際のディレクトリに接続されている場合をどのように検出しますか?

sshRailsサーバーに入っている場合は、実際にはへの/var/www/some_app/currentシンボリックリンクです/var/www/some_app/releases/20201015004444。展開すると、current(たとえば)を指す新しいシンボリックリンクに置き換えられます/var/www/some_app/releases/20201023010000

ただし、pwd出力や変更値はありません$PWD。もちろん私のヒントは変わりません。何かが間違っていたという明白な兆候はありませんでした。すべてが素晴らしいようにうんざりしていて、新しいシンボリックリンクに変更する必要があるという事実を忘れてしまうと、問題が発生するか失敗するまでディレクトリを変更することを忘れてしまったことはわかりません。

current実際の現在のディレクトリと実際の現在のディレクトリ値を簡単に比較するにはどうすればよいですか?

答え1

readlink -f .どこにいるのか教えてあげる実際にはい、 readlink -f $PWDシンボリックリンクが何であるかをお知らせします。現在存在するディレクトリでなくても指します。

これは関数に簡単にカプセル化できます(必要に応じて自動的にトリガーできます)。

correct_current_directory() {
  [[ $(readlink -f .) = $(readlink -f $PWD) ]] || echo "Moving $PWD from $(readlink -f .) to $(readlink -f $PWD)" && cd $PWD
}

もちろん何もない現在の場所にあると思いますが、シンボリックリンクが別のディレクトリに移動された場合は、問題が解決されていることを丁寧にお知らせします。以前の場所と新しい場所の両方がリストされているため、何が起こっているのかを正確に知ることができます。

関連情報