私はzsh
シンボリックリンクを作成しました。
$ ln -s ~/Documents symboliclink
それでは、このシンボリックリンクの中に何があるのか知りたいです。
$ ls -l symboliclink
> lrwxrwxrwx 1 user user 21 Oct 10 15:56 symboliclink -> /home/user/Documents
これはシンボリックリンクのみを表示し、その中にあるものは表示しません。 just を使用するとls
内容が一覧表示されますが、flags を使用すると-l
内容は一覧表示されません。これはforbash
およびls
で機能しますls -l
。どうすればzsh
このような行動も得られますか?
答え1
ls
オプションは次のとおりです-H
。
ls -lH symboliclink
からman 1p ls
:
- 時間
ディレクトリタイプファイルを参照するシンボリックリンクがコマンドラインで指定されている場合、lsはリンク自体ではなくリンクが参照するファイルのファイル情報とファイルタイプを評価します。ただし、lsはリンク自体の名前を作成する必要があります。 、参照文書リンクではありません。
-Lオプションも参照してください。
-エル
すべてのシンボリックリンクのファイル情報とファイルタイプ(コマンドラインで名前が付けられているかファイル階層で見つかったか)は、リンク自体ではなくリンクによって参照されるファイルのものと評価されます。ただし、lsは次の名前を作成する必要があります。リンクが参照するファイルではなく、リンク自体です。 -Lを-lと一緒に使用すると、シンボリックリンクの内容が長い形式で記録されます(STDOUTセクションを参照)。
答え2
ls -l
2つの出力差が見える理由の1つ扱いにくいそして強く打つ-completionを使用Tab
してAUTO_REMOVE_SLASH
有効にすることです。扱いにくい(デフォルトです)。
スラッシュの自動削除<ディ>
完成結果の最後の文字がスラッシュで、次に入力される文字が単語区切り文字、スラッシュ、またはコマンドを終了する文字(セミコロンやアンパサンドなど)の場合は、スラッシュを削除します。
ls -l symb
Tabと入力すると、zsh
とをbash
実行しますls -l symboliclink/
(/
最後の項目を参照)。違いは、それを押すだけ(つまり、コマンドの終了)スラッシュが削除されることですzsh
(有効になっている場合AUTO_REMOVE_SLASH
)。Enter
だからあなたは効果的にls -l symboliclink/
走るでしょう強く打つ、ls -l
リンクの後ろを見てください。しかし、扱いにくいターゲットディレクトリではなくリンクに関する情報を確認するようにls -l symboliclink
指示します。ls -l
ls
オプションがない場合は、最後に-l
関係なく常にターゲットディレクトリの内容が表示されます。/
得るために扱いにくい末尾のスラッシュを削除しない場合は、TAB
-completion 後に明示的にスラッシュを入力するだけで十分です。通常、完成したテキストは顕著に変わりませんが、/
スペースを入力したりコマンドを確認したりしても保持されます。 「通常」は、マゼンタや太字など、自動的に追加されたサフィックス文字に対して強調表示を設定できるためです。
zle_highlight[(r)suffix:*]="suffix:fg=magenta,bold"
(メモ:外部使用時には動作しない場合があります。ZSH構文強調プラグイン)
(明らかに)もう一つの解決策はを無効にすることですAUTO_REMOVE_SLASH
。
setopt noautoremoveslash
答え3
最後に「/」を追加するだけです。
ls -l symboliclink/
答え4
プログラムの動作は、プログラムls
が呼び出されるシェルには依存しません。 Bashとzshで異なる動作が観察された場合、ls
これはあるシェルではエイリアス(または関数)を呼び出したが、ls
別のシェルでは呼び出さなかったためです。 zsh で観察される動作はls
bash の動作と一致するため、これを呼び出すには別のオプションを使用する必要があります。
シンボリックリンクを逆参照するように、またはにls
エイリアスを指定した可能性があります。 alias()をバイパスする以外に、シンボリックリンク自体に関する情報を取得できないため、これは悪い考えです。ls -H
ls -L
\ls
ファイルがディレクトリへのシンボリックリンクの場合は、末尾のスラッシュを追加してファイルの代わりにディレクトリで作業できます。 .seels -l symboliclink/
と同じです。ls -l symboliclink/.
シンボリックリンクはいつシンボリックリンクと同様にリンクされると考えられますか?