Shell
我的提示定義與 zsh 中的 cat 衝突
我在遠端文件系統上有一個文件,我知道其中有一個短文本字元串(單行中的數字序列)。如果我在 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 選項。您還可以嘗試連結電子郵件中的“空格行”選項。