упрощение:
ls
просматривает индекс (запись каталога), созданный перенаправлением.
wc
может видеть инод, созданный перенаправлением, но когда он просматривает содержимое, они пусты, потому что он (wc
) еще не записал их.
Edit:
Во-первых, в обоих случаях перенаправление (>ls.out
или >temp
) создает пустой файл. Запись (inode) в каталоге сделана так, чтобы указывать на местоположение файла и содержать некоторую информацию о нем. См. Статью в Википедии inode .
Далее, в случае ls
, все записи в каталоге, , включая запись для ls.out
, которая только что была создана , считываются и записываются в stdout
(что в этом дело становится содержанием ls.out
).
Или, в случае wc
, он подсчитывает количество строк новой строки, слова и байты недавно созданного файла с именем temp
, который пуст , поэтому он записывает нулевые значения в файл после считается (ничего).
Содержимое файлов (temp
или ls.out
) не записывается до тех пор, пока не будет завершено чтение, поэтому их нельзя было включить.
Для лучшего способа сравнения того, что делают ls
и wc
, попробуйте эту команду (когда ls.out
не существует):
ls -l > ls.out
Вы должны увидеть, что размер файла для ls.out
равен нулю в соответствии со списком, содержащимся внутри (cat ls.out
), но если вы сделаете ls -l ls.out
, вы увидите, что он не равен нулю. Это соответствует тому, что вы видите с wc
.