Ame*_*ina 7 command-line shell prompt 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%}%%
> "
Run Code Online (Sandbox Code Playgroud)
在定义我的提示之前,我有以下两行,我相信它们使我能够在 shell 中使用颜色别名:
autoload -U colors
colors
Run Code Online (Sandbox Code Playgroud)
考虑到上述情况,如何在我的提示中获得换行符,并且仍然设法cat
正确打印上述文件?
*如果我touch
是一个随机文件,ls
报告该文件只有 0 个字节,所以我认为ls
报告我的文件有 8 个字节的事实是有意义的。不确定这是否有帮助。
Zsh 在提示之前自动输出一个 CR,以便提示可以从已知位置开始。请注意,如果您使用 zsh 以外的 shell,您将获得:
$ cat file
12345678$ _ <-- your prompt after the file contents
Run Code Online (Sandbox Code Playgroud)
这是有关该问题的常见问题解答条目: //zsh.sourceforge.net/FAQ/zshfaq03.html#l40
出于这个原因和其他原因,文本文件应该以换行符结尾 - 找到一种创建它们的工具而不包含一个换行符是不寻常的(跨平台环境除外 - Windows 记事本不会以换行符结束文件)例子)
如果您可以在大多数命令的输出(如在 Windows 上)在提示之前容忍一个额外的空行,请尝试在提示的开头添加一个换行符:
export PS1="
%{$fg[white]%}%n%{$reset_color%} @ %{$fg[green]%}%m: %{$fg[yellow]%}%~ %{$reset_color%}%%
> "
Run Code Online (Sandbox Code Playgroud)
并且(也许,即使打开它也可能实际工作)禁用 prompt_cr shell 选项。您还可以尝试链接电子邮件中的“空格行”选项。
我的猜测是您的 shell 提示覆盖了 cat 写的行。请尝试以下操作来检查是否是这种情况:
cat file; echo
Run Code Online (Sandbox Code Playgroud)
根据您的 shell,您可以以某种方式调整您的配置文件,以确保这永远不会发生。