“head -c ”输出显示在提示之前

“head -c ”输出显示在提示之前
head -c 3 sample.txt

输出将显示在提示中的用户名之前。

Theuser@localhost:/home$

The之后不再打印$

为什么我的终端会这样做?

答案1

The之后没有被打印$

为什么应该这样?head首先打印,然后 shell 提示您输入下一个命令。尽管期望在单独的行中出现提示是有点合理的,但仍然(以下)The

head -c 3 sample.txt准确打印The并且之后没有换行符e。您请求head将 3 个字节打印到其标准输出(即本例中的终端),并且您恰好得到了 3 个字节。其中没有换行符。

通常,命令(例如echo)的文本输出以换行符结尾。当 shell 在命令终止后打印提示时,它会在换行符之后立即打印,因此您会在新行的开头看到提示。

在您的情况下,之后没有换行符The,因此当 shell 打印到终端时,提示符出现在同一行中。

有些 shell 会检测到这种情况即将发生. 你的 shell 显然没有。

处理行的工具会用尾随换行符打印它们,因为这些字符实际上属于各自的行。源数据中最后一行(例如 )不完整(即没有尾随换行符)的情况sample.txt可以通过忽略该行或按原样打印(没有换行符)或通过修复(添加换行符)来处理;这取决于工具及其实现。

sample.txt包含完整的行以及head -n处理行,您可以期待完整的行。但是head -c处理字节,除非您事先知道要打印的最后一个字节是换行符,否则您不应该假设输出的最后一行是完整的。

echo您可以通过在之后不带参数调用来轻松添加换行符head

head -c 3 sample.txt; echo

然后您的提示几乎*肯定会出现在单独的行中。只要记住这一换行符来自echo,而不是来自sample.txt


* 例外情况是,当输出head包含移动光标等的终端控制序列时。我不希望此类序列适合三个字节,但一般来说,如果文件包含它们,并且终端是否理解它们,并且如果您请求足够的字节,然后终端将服从。如果发生这种情况,则可以在任何地方看到提示(或者更糟

相关内容