Каково различие в использовании “сенсорного файла” и “> файл” в создании нового файла?

Я плохо знаком с Linux. Когда я создаю новый файл .gitignore под текущим каталогом с помощью удара, я узнал, что могу сделать:

> .gitignore

или

touch .gitignore

Кажется, что они делают то же самое. Когда я проверяю руководство на touch, это говорит, что метка времени изменения для текущего файла, но нет никакого руководства для >. Так может кто-то объяснять, что может > и там какое-либо различие в использовании этих двух команд под этим контекстом?Спасибо.

13
задан 7 February 2017 в 17:53

2 ответа

> оператор перенаправления оболочки. См. What' s является различием между " > " и " > > " в команде оболочки? и , Когда должен, я использую < или < () или < < и > или > ()? Это, прежде всего, используется для перенаправления вывода команды в файл. Если файл не существует, оболочка создает его. Если это существует, оболочка усекает это (освобождает его). Со всего > file, нет никакой команды, таким образом, оболочка создает файл, но никакой вывод не отправляется в нее, таким образом, результирующий эффект является созданием пустого файла или освобождением существующего файла.

touch внешняя команда, которая создает файл или обновляет метку времени, как Вы уже знаете. С touch, не потеряно содержание файла, если это существует, в отличие от этого, с >.

поведение > зависит от оболочки. В ударе будут работать тире и большинство оболочек, > foo, как Вы ожидаете. В zsh, по умолчанию, > foo работы как cat > foo - zsh ожидают Вас, вводят во входе.

21
ответ дан 23 November 2019 в 03:16

Вот интересное сравнение:

$ cat redirect.sh touch.sh sed.sh awk.sh cp.sh truncate.sh tee.sh vi.sh
> redirect.txt
touch touch.txt
sed 'w sed.txt' /dev/null
awk 'BEGIN {printf > "awk.txt"}'
cp /dev/null cp.txt
truncate -s0 truncate.txt
tee tee.txt </dev/null
vi -esc 'wq vi.txt'

Результат:

$ strace dash redirect.sh | wc -l
387

$ strace dash touch.sh | wc -l
667

$ strace dash sed.sh | wc -l
698

$ strace dash awk.sh | wc -l
714

$ strace dash cp.sh | wc -l
786

$ strace dash truncate.sh | wc -l
1004

$ strace dash tee.sh | wc -l
1103

$ strace dash vi.sh | wc -l
1472
1
ответ дан 23 November 2019 в 03:16

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

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