Очистка файла кошкой> имя файла

Файлы могут быть очищены с помощью cat /dev/null > filename. Действительно ли это - тот же специальный файл, который работает каждый раз, когда cat > filename сделан?

-1
задан 25 July 2015 в 18:51

3 ответа

Короткий ответ Нет.

Это два различных метода Очистки использования текстового файла cat /dev/null > file и
cat > file сопровождаемый Ctrl + C.

Перенаправление > используется для перенаправления вывода в некоторый файл. Например, date покажет текущее время и дату на станд.

$ date
Sat Jul 25 20:56:09 IST 2015

Если Вы используете,

$ date>/path/to/file

Затем это перенаправит stdout кому: file.

$ cat /path/to/file
Sat Jul 25 20:56:23 IST 2015

Как cat /dev/null>file очищает содержание файла

Это просто перенаправляет содержание пустого устройства /dev/null в файл. Таким образом, содержание перезаписывается, и это становится пустым.

Как cat > file очищает содержание файла

cat Свяжите файл (файлы) или стандартный вход, к стандартному выводу. Возьмите следующий пример,

$ cat
some text          # by user on stdin
some text          # stdin to stdout concatenated by cat
some other text    # by user on stdin
some other text    # stdin to stdout concatenated by cat
^C                 # Ctrl+C to terminate.

Команда cat > file будет ожидать stdin и перенаправит и перезапишет файл. Это должно быть остановлено с помощью Ctrl + C.

Если Вы ничего не вводите в stdin и завершаете процесс с SIGINT (Ctrl+C) это перезапишет файл с пробелом.

Следующий пример там для большего количества разъяснения:

$ cat > file
some text
some other text
^C
$ cat file
some text
some other text
2
ответ дан 1 October 2019 в 06:20

Никакой специальный файл не имеет полезной цели ни в одном случае.

cat /dev/null точно не, эта команда не делает абсолютно ничего из интереса, и это может быть заменено любой командой, которая ничего не производит.

можно, например, очистить содержание файла с любой из этих команд:

printf > filename
true > filename
: > filename

или даже, со многими оболочками, при помощи никакой команды вообще, но перенаправления:

> filename

, С другой стороны:

cat > filename

перенаправляет stdin, т.е. все, что Вы вводите на своей клавиатуре к имени файла. Если бы Вы прерываете эти cat команда прежде, чем ввести что-нибудь, результатом также был бы пустой файл, но это - довольно неэффективный метод, чтобы сделать это.

1
ответ дан 1 October 2019 в 06:20

Нет, что очищается, файл не /dev/null, но > перенаправление, которое внутренне усекает сам выходной файл прежде, чем перенаправить вывод cat.

  • cat /dev/null > filename: Вы открываетесь /dev/null и печать его "содержания" (ничто) к stdout; одновременно дескриптор файла для filename открыт, файл усеченный и stdout из cat перенаправляется к нему (следовательно, ничто на самом деле не перенаправляется в файл),
  • cat > filename: Вы ничего не печатаете к stdout, потому что Вы не указываете файл, и Вы даже не являетесь передающими stdin (который имеет эффект создания cat ожидание undefinetly); одновременно дескриптор файла для filename открыт, файл усеченный и stdout из cat перенаправляется к нему (следовательно, ничто на самом деле не перенаправляется в файл),

Они делают точно то же самое (с точки зрения очистки файла), но первое открывает дополнительный дескриптор файла по сравнению со вторым, и второе будет ожидать undefinetly чего-то для входа cat stdin.

Методы, эквивалентные первому (и второму мудрому результатом, но без стычки ожидания undefinetly cat) был бы:

$ echo -n | cat > file # empty pipe
$ <emptyfile cat > file # empty file
$ <<<'' cat > file # empty herestring
$ <<EOF cat > file
>EOF # empty heredoc
0
ответ дан 1 October 2019 в 06:20

Другие вопросы по тегам:

Похожие вопросы: