Shell

我的提示定義與 zsh 中的 cat 衝突

  • October 6, 2011

我在遠端文件系統上有一個文件,我知道其中有一個短文本字元串(單行中的數字序列)。如果我在 nano 或 Emacs 等文本編輯器上打開文件,我可以看到該字元串。此外,不確定這是否相關,但ls報告文件有 8 個字節*。

奇怪的是,如果我cat這個文件,cat什麼也不報告。

但是,我注意到如果我在行尾添加換行符,cat則會顯示內容,這讓我感到困惑。

所以我的問題是:

  • 為什麼會這樣?我真的需要在每行末尾換行來cat列印其內容嗎?這是預設行為cat嗎?(如果有,背後的原因是什麼?)
  • 有沒有辦法強制cat列印文件中的所有內容,無論我是否有換行符?

更新:

根據下面的答案,我認為發布我如何定義我的提示是相關的。我在zsh,我的上有以下兩~/.zshrc

export PS1="%{$fg[white]%}%n%{$reset_color%} @ %{$fg[green]%}%m: %{$fg[yellow]%}%~ %{$reset_color%}%%
> "

在我的提示定義之前,我有以下兩行,我相信這使我能夠在 shell 中使用顏色別名:

autoload -U colors
colors

改寫問題:

考慮到上述情況,如何在提示符中獲得換行符,並且仍然能夠cat正確列印上述文件?


*如果我touch是一個隨機文件,ls報告該文件只有 0 個字節,所以我認為ls報告我的文件有 8 個字節的事實是有意義的。不確定這是否有幫助。

Zsh 在提示之前自動輸出 CR,因此提示可以從已知位置開始。請注意,如果您使用 zsh 以外的 shell,您將獲得:

$ cat file
12345678$ _ <-- your prompt after the file contents

這是有關該問題的常見問題解答條目:http: //zsh.sourceforge.net/FAQ/zshfaq03.html#l40

由於這個和其他原因,文本文件應該以換行符結尾 - 找到一個不包含換行符的工具是不尋常的(在跨平台環境中除外 - Windows 記事本不會以換行符結束文件例子)

如果您可以容忍在提示之前大多數命令的輸出(如在 Windows 上)之後有一個額外的空行,請嘗試在提示的開頭添加換行符:

export PS1="
%{$fg[white]%}%n%{$reset_color%} @ %{$fg[green]%}%m: %{$fg[yellow]%}%~ %{$reset_color%}%%
> "

並且(也許,即使打開它,它實際上也可以工作)禁用 prompt_cr shell 選項。您還可以嘗試連結電子郵件中的“空格行”選項。

引用自:https://unix.stackexchange.com/questions/22167