На этот вопрос уже есть ответ здесь:
Я удалил все файлы в каталоге, а затем запустил ls> foo
в том же каталоге.
Запуск cat foo
показывает, что вновь созданный файл «foo» содержит «foo». Почему файл "foo" не пустой? Когда выполняется ls
, в каталоге еще нет файлов, верно?
Директива командной строки >
имеет место до выполнения команды ls
. Оболочка должна быть готова сохранить выходные данные, которые может выдать команда ls
, поэтому она должна создать и открыть файл для записи.
Когда ls
выполняется оболочкой, файл foo
существует, и поэтому ls
выдает «foo», что вы и нашли в файле foo
.