Замена файла с помощью «sort x.txt> x.txt» в Cygwin - PullRequest
0 голосов
/ 14 января 2010

Почему «sort x.txt> x.txt» очищает содержимое файла, а «sort x.txt> y.txt» записывает отсортированный файл в y.txt, как и следовало ожидать

Ответы [ 5 ]

1 голос
/ 14 января 2010

Оболочка усекает x.txt до вызова команды sort x.txt, поэтому к моменту выполнения команды сортировки сортировать уже нечего.

Почти все оболочки ведут себя таким образом (включая окно Windows CMD); это не просто особенность Cygwin.

1 голос
/ 14 января 2010

Когда вы запускаете команду, вы фактически указываете оболочке открыть x.txt для записи (>> будет добавлено, что будет по-другому), а затем выгрузите в нее результаты «sort x.txt» - просто так получилось, что, поскольку он открывает файл для записи, он сначала запускает новый файл с именем x.txt, а затем выполняет сортировку x.txt, которая сортирует пустой файл.

Я не уверен в том, почему время таково, как сейчас, но я думаю, что это может помешать вам попытаться запустить команду для записи в файл, к которому у вас нет разрешения на запись и т. Д. - сначала открывает его для записи, чтобы убедиться, что может).

0 голосов
/ 14 января 2010

Когда оболочка видит команду sort x.txt > x.txt, она видит, что выходные данные команды сортировки должны идти в файл x.txt, поэтому она открывает файл x.txt для записи, это уничтожит содержимое файл, если файл уже содержал что-либо в нем.

Если вы хотите избежать этого, вы можете перенаправить вывод сортировки во временный файл, а затем переименовать временный файл в x.txt

0 голосов
/ 14 января 2010

При выполнении команды оболочка в первую очередь открывает выходной файл для записи выходных данных программ, эффективно обрезая его до нулевой длины. Затем он запускает команду сортировки, и в случае sort x.txt > x.txt сортируется новый пустой файл x.txt.

0 голосов
/ 14 января 2010

sort a > b откройте a и b вместе с a для чтения и b для записи. как б для записи, это будет очищено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...