~/testing $ echo Hello > hello.txt
~/testing $ echo Goodbye > goodbye.txt
~/testing $ cat goodbye.txt hello.txt > HELLO.txt
^C
~/testing $ ls -l
total 9056
-rw-r--r-- 1 user user 8 25 Jul 16:21 goodbye.txt
-rw-r--r-- 1 user user 4631048 25 Jul 16:22 hello.txt
~/testing $
世界卫生大会?我在这里缺少一些东西。我是否缺少不敏感地销毁文件选项?为什么这看起来循环?
答案1
Mac OS X 默认情况下使用不区分大小写的文件系统。如果您想更改,则需要使用区分大小写的选项重新格式化磁盘。请注意,一些由主要供应商编写的程序<咳>Adobe</咳>、<咳>微软</咳>区分大小写的文件系统存在严重问题。
虽然文件系统不区分大小写,但所有文件都将以其自然大小写显示。即,如果您有一个名为+ (大写 H 然后制表hello.txt
符)的文件,您将不会获得任何补全候选(除非您将 shell 设置为不敏感补全)。shiftHTab
答案2
cat goodbye.txt hello.txt > HELLO.txt
事件的顺序:
- shell 将 hello.txt 截断为零字节。
- cat 将goodbye.txt 的内容写入指向hello.txt 的stdout。
- cat 开始读取 hello.txt 并将其读取的内容写入到 stdout,后者仍指向 hello.txt。由于 cat 正在读取和写入同一文件,因此它永远不会到达文件末尾,并将继续添加到 hello.txt 直到文件系统已满。
答案3
OSX 中格式化磁盘的默认选项是 HFS+ Journaled(不区分大小写)。如果您需要这种行为,则必须明确将格式设置为区分大小写。
您所看到的行为是有意为之的。