私が従ったチュートリアルの1つはうまくcd .
いかないと簡単に説明します。 OPに表示されている問題を再現しようとするとSymlinkの再帰 - 「リセット」になるのはなぜですか?、私も試してみましたが、cd .
OPで説明したのと同じ効果($PWD
変数の増加)が現れました。これを相殺するために使用できますcd -P
。
人々が実際に使用したい状況がありますかcd .
?
答え1
私はこれが過度の考えの問題だと思います。cd .
おそらく一般的なケースでは、人々が手動で実行するわけではありませんが、プログラムで実行できることは明らかです(cd
ユーザーがパスを指定したファイルを含むディレクトリに移動できる状況を考えてください)。したがって、特定の目的を持つ必要はありません。一般的な意味を満たす限りcd <some-path>
便利です。
答え2
最後のコマンドが実行されてからディレクトリパスが変更された可能性があり、cd .
bashシェルとksh93シェルがない場合は、質問にリンクされている投稿で説明されている論理作業ディレクトリに依存するため、これを呼び出すとシェルがシステムをcd .
実行します。getcwd()
呼び出すと、現在のパスがまだ有効であることを確認できます。
Bashで再現する手順:
- 端末タブの問題
mkdir ./dir_no_1; cd ./dir_no_1
- 他の端末タブの問題
mv dir_no_1 dir_no_2
- 最初のターミナルタブ
echo $PWD
に関する問題pwd
ディレクトリ名が外部に変更され、シェル環境が更新されませんでした。 - 質問
cd .; pwd; echo $PWD
。値が更新されました。
ただし、ksh93は環境情報を更新しないため、cd .
ksh93では実際には役に立ちません。/bin/dash
Ubuntuやその他のDebianベースのシステムではエラーがcd .
返されますが、動作します(ksh93とは異なり)。dash: 3: cd: can't cd to .
cd -P .
答え3
別のユースケースは、cd .
現在存在するディレクトリが削除され、再作成される場合です。以下をお試しください -
- ディレクトリの作成
temp
cd temp
それからls
- 別の端末を開き、ディレクトリを削除して再作成します。
temp
- 最初のターミナルから戻ってlsを実行してみてください。これによりエラーが発生します。
ls: cannot open directory .: Stale file handle
cd .
その後、lsを実行すると動作します。
答え4
プログラミングの観点から見ると、無動作として有用です。外部入力から提供されるパスを検討してください。
read -p "Path to file: " p
dirn=$(dirname "$p")
file=$(basename "$p")
echo "dirn=$dirn, file=$file"
cd "$dirn"
ls -ld "$file"
"fred.txt"などのパスを使用すると、ディレクトリは次.
のようになります。cd .