Скажем, файл с именем abc
существует в текущем каталоге и в нем есть текст. Когда вы выполняете команду:
cat abc > abc
Почему abc
исчезает содержимое файла ?
Почему команда удаляет текст в нем, и файл становится пустым файлом?
files
io-redirection
cat
Тулси Канодия
источник
источник
cut
изменить файл на месте?cat abc | dog abc
tee
.Ответы:
Из-за того, как все сделано.
Когда вы делаете:
>
является оператором перенаправления вывода, когда оболочка видит это, она открывает файл в режиме усечения, используяO_TRUNC
флаг,open(2)
т. е. всеopen("abc", O_TRUNC)
, что было в файле, будет удалено. Обратите внимание, что это перенаправление выполняется сначала оболочкой перед выполнениемcat
команды.Поэтому, когда команда
cat abc
выполняется, файлabc
уже обрезан, и, следовательноcat
, найдет файл пустым.источник
cat: filename: input file is output file
(гдеfilename
имя файла вы выбрали) печатается на старом стандартном выводе.В дополнение к ответу @ heemayl , если вы хотите, чтобы код был более понятным в последовательности, в которой происходят события, вы можете просто поместить любые перенаправления в начало команды:
источник