「ls」が特定のディレクトリにあるときにのみコンテンツを表示するのはなぜですか?

「ls」が特定のディレクトリにあるときにのみコンテンツを表示するのはなぜですか?

ls検索できない非常に混乱した動作に直面しました。ディレクトリにコンテンツがあることを示しますが、コンテンツが作成されたディレクトリにある場合にのみ表示されます。

お見せします:

ciprian Documents $ pwd
/Users/ciprian/Documents

ciprian Documents $ ls ../Downloads/rss22/
22rss-USB/

ciprian Documents $ ls ../Downloads/rss22/22rss-USB/
HTML/

ciprian Documents $ cd ../Downloads/rss22

ciprian rss22 $ ls

ciprian rss22 $ ls 22rss-USB/
gls: cannot access '22rss-USB/': No such file or directory

cd編集した後は、../Downloads/rss22内容が空白のように見えます。 I次のIの場合、ここの最初のケースのようにcd ~/Desktop空白になります。ls ../Downloads/rss22/

私にとって、これは次のツールがあるかもしれないことを示唆しています。../Downloads/rss22 ~へ Documents。ところで、どのように表示すべきかわかりません。ls -a ~/Documentsこのフォルダに関する内容は表示されません。

どうしたの?

これらのファイルは、アーカイブから部分抽出を試みて作成されます。unzip 22rss-USB.zip "22rss-USB/HTML/**/*" -d ../Downloads/rss22/

ちなみに私はアップルシステム私はそれが重要ではないと思いますが(Unixですか?)私はBash 5.1.16(デフォルトのzshで変更されています)を使用しています。

:pwd の出力はシェル組み込みtype pwdコマンドです。

cd -P ../Downloads/igarss22/これは私が期待どおりに表示されることを示しています。これに関する詳細情報はどこで確認できますか?man cdについては何も表示されません-P

今、その後cd -P ../Downloads/igarss22/

ciprian Documents $ cd -P ../Downloads/igarss22

ciprian igarss22 $ pwd
/Users/ciprian/Library/CloudStorage/OneDrive/Downloads/igarss22

正しい。だから私はこれを忘れていました。~/Documents私のOneDriveの下のフォルダへのシンボリックリンク。

$ ll ~/ | grep Doc
lrwxr-xr-x    1 ciprian   38 May 19  2022 Documents -> /Users/ciprian/OneDrive/Documents

どんな魔法と変化のためにMacOS v12(モントレー)、実際に住んでいます/Users/ciprian/Library/CloudStorage/OneDrive

何が起こったのかまだわかりません。

ベストアンサー1

違いは物理的処理と論理的処理にあります..

明らかに、2つの別々のDownloadsディレクトリがあります。

  • 一つは/Users/ciprian/Downloads
  • もう一つは/Users/ciprian/Library/CloudStorage/OneDrive/Downloads

一部のシェル(すべてのPOSIXシェルを含む)には、コマンドで「ユーザーが示すように正確に現在のパスを取得し、右端の要素を切り取り、結果のパスに変更」として処理するbashオプションがあります。シンボリックリンクを使用すると、これは論理的な「私たちが来た場所に戻る」役割を果たします。 (シンボリックリンクとユーザーが呼び出した)から(次にこの時点の新しいパスは)次に戻ります。そこ。これを使用すると、得られる明示的な動作です。..cd/Users/ciprian/Library/CloudStorage/OneDrive/Documents~/Documents/Users/ciprian~/Users/ciprian/Downloadscd -L

他のプログラムは通常これを行いません。実際のパスに従うので、ディレクトリをからに変更することは../Downloads常に/Users/ciprian/Library/CloudStorage/OneDrive/Documentsに変更することを意味します/Users/ciprian/Library/CloudStorage/OneDrive/Downloadscd -P

シェルのこの(バグ付き)機能が気に入らない場合は、それを無効にするシェル固有の方法があるかもしれません。bashシェルの場合、または同様のシェル起動スクリプトにまたはをset -P追加すると、明示的に使用されない限り、すべてのコマンドはそのオプションで機能します。set -o physical~/.bashrcbashcd-P-L

ノート。文書はBashの内部コマンドであるため(SHELL BUILTIN COMMANDSセクション)-Pにあります。man bashcd

おすすめ記事