bash - 有趣的 bash 行为

标签 bash shell sh

为什么这个命令(创建一个空文件夹,更改到它,触摸一个文件,调用 ls 然后 cating 它)显示两个文件?

root@ubuntu:~# mkdir a ; cd a ; touch b ; ls > c ; cat c
b
c

我相信我应该只得到“b”。

最佳答案

当您将 ls 的输出重定向到文件 c 时,这是一个先有鸡还是先有蛋的问题:

如果 c 不会预先创建,这意味着 shell 需要将输出存储在缓冲区中并(最后)将该缓冲区写入文件。

由于在许多情况下这不是最好的方法(因为内存管理、对在完成前被中断的命令的失败管理等),文件会提前创建。

因此,命令的标准输出可以替换为新创建的文件,命令输出可以到该文件。

关于bash - 有趣的 bash 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202959/

相关文章:

linux - 在文件内搜索和替换

linux - 为什么我不能从另一个终端写入我的终端设备的标准输入

linux - 确保用户在 Debian GNU/Linux 系统上存在

linux - 从 shell 脚本中杀死一组特定的进程

bash - bash 中的时间戳算法

linux - 每 5 分钟将 curl 输出重定向到动态文件名

linux - Bash:-c:第 0 行:意外的 EOF

bash/sh 嵌套转义序列

bash脚本将字符串 append 到同一目录中的多个文件

linux - bash shell 脚本显示段错误