Я плохо знаком с Linux. Когда я создаю новый файл .gitignore под текущим каталогом с помощью удара, я узнал, что могу сделать:
> .gitignore
или
touch .gitignore
Кажется, что они делают то же самое. Когда я проверяю руководство на touch
, это говорит, что метка времени изменения для текущего файла, но нет никакого руководства для >
. Так может кто-то объяснять, что может >
и там какое-либо различие в использовании этих двух команд под этим контекстом?Спасибо.
>
оператор перенаправления оболочки. См. What' s является различием между " > " и " > > " в команде оболочки? и , Когда должен, я использую < или < () или < < и > или > ()? Это, прежде всего, используется для перенаправления вывода команды в файл. Если файл не существует, оболочка создает его. Если это существует, оболочка усекает это (освобождает его). Со всего > file
, нет никакой команды, таким образом, оболочка создает файл, но никакой вывод не отправляется в нее, таким образом, результирующий эффект является созданием пустого файла или освобождением существующего файла.
touch
внешняя команда, которая создает файл или обновляет метку времени, как Вы уже знаете. С touch
, не потеряно содержание файла, если это существует, в отличие от этого, с >
.
поведение >
зависит от оболочки. В ударе будут работать тире и большинство оболочек, > foo
, как Вы ожидаете. В zsh, по умолчанию, > foo
работы как cat > foo
- zsh ожидают Вас, вводят во входе.
Вот интересное сравнение:
$ 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