Как называется этот оператор? Я хотел бы найти руководство по этому поводу.
Влад Т.
96
оператор> перенаправляет вывод в файл, перезаписывая файл, если он существует. >> добавится к существующему файлу.
Тритон Мэн
4
Спасибо, вот ссылка на вики-страницу, на случай, если она кому-нибудь понадобится en.wikipedia.org/wiki/…
Влад Т.
11
Если вам нужно сделать это с правами root, сделайте это так:sudo sh -c 'echo "some data for the file" >> fileName'
lukaserat
1
Что если мой текст похож на этот и по какой-либо причине я не могу использовать curlили wget?
Asedsami
145
#!/bin/sh
FILE="/path/to/file"/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
Объяснение вашего кода будет иметь большое значение для того, чтобы сделать его более полезным для других. Даже выноски из словаря, такие как «здесь документ» и «перенаправление», могут указывать поисковикам на другие ресурсы.
Palpatim
2
Объяснение не так необходимо для чего-то подобного.
Бхаргав Нанекалва
6
Объяснение никогда не требуется, когда вы уже знаете ответ. Для меня приведенный выше код не помогает из-за отсутствия деталей.
Я знаю, что это чертовски старый вопрос, но поскольку ОП касается сценариев и того факта, что Google привел меня сюда, следует также упомянуть открытие файловых дескрипторов для чтения и записи одновременно.
#!/bin/bash# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red">&3
echo "Violets are blue">&3
echo "Poems are cute">&3
echo "And so are you">&3# Close fd 3
exec 3>&-
Тогда catфайл на терминале
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
В этом примере файл poem.txt открывается для чтения и записи в файловом дескрипторе 3. Он также показывает, что * nix-окна знают больше fd, чем просто stdin, stdout и stderr (fd 0,1,2). Это на самом деле много держит. Обычно максимальное количество файловых дескрипторов, которое может выделить ядро, может быть найдено /proc/sys/file-maxили, /proc/sys/fs/file-maxно использование любого fd выше 9 опасно, поскольку может конфликтовать с fd, используемым оболочкой внутри. Так что не беспокойтесь и используйте только fd's 0-9. Если вам нужно больше 9 файловых дескрипторов в bash-скрипте, вы все равно должны использовать другой язык :)
В любом случае, fd можно использовать во многих интересных случаях.
Возможно, вы захотите избежать запуска корневой оболочки только для печати строки. Попробуйте echo "some data for the file" | sudo tee -a fileName >/dev/nullзапустить только teeкак root.
tripleee
6
В средах, где документы здесь недоступны ( Makefileи Dockerfileт. Д.), Вы часто можете использовать их printfдля разумного и эффективного решения.
printf '%s\n''#!/bin/sh''# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done'>outputfile
Ваш комментарий выше Попробуйте повторить "некоторые данные для файла" | sudo tee -a fileName> / dev / null для запуска только в качестве пользователя root. было действительно полезно!
Коджо
5
Я думал, что было несколько совершенно прекрасных ответов, но нет краткого описания всех возможностей; таким образом:
Основным принципом, лежащим в основе большинства ответов здесь, является перенаправление . Два важных оператора перенаправления для записи в файлы:
Перенаправление вывода:
echo 'text to completely overwrite contents of myfile' > myfile
Добавление перенаправленного вывода
echo 'text to add to end of myfile' >> myfile
Здесь документы
Другие упомянутые, а не из фиксированного источника ввода, как echo 'text' , вы также могли бы в интерактивном режиме записывать в файлы через «Здесь документ», которые также подробно описаны в ссылке на руководство bash выше. Эти ответы, например,
cat > FILE.txt <<EOF или cat >> FILE.txt <<EOF
использовать те же операторы перенаправления, но добавить еще один слой через «Здесь документы». В приведенном выше синтаксисе вы пишете в FILE.txt через выводcat . Запись происходит только после того, как для интерактивного ввода задана какая-то конкретная строка, в данном случае «EOF», но это может быть любая строка, например:
cat > FILE.txt <<'StopEverything' или cat >> FILE.txt <<'StopEverything'
будет работать так же хорошо. Здесь Документы также ищут различные разделители и другие интересные символы синтаксического анализа, поэтому взгляните на документы для получения дополнительной информации об этом.
Здесь Строки
Немного запутанный, и больше упражнений в понимании как перенаправления, так и синтаксиса Here Documents, но вы можете объединить синтаксис стиля Here Document со стандартными операторами перенаправления, чтобы стать Here String:
Перенаправление вывода ввода cat
cat > myfile <<<'text to completely overwrite contents of myfile'
Добавление перенаправленного вывода ввода cat
cat >> myfile <<<'text to completely overwrite contents of myfile'
sudo sh -c 'echo "some data for the file" >> fileName'
curl
илиwget
?источник
Вы можете перенаправить вывод команды в файл:
или добавить к нему
Если вы хотите написать непосредственно команду
echo 'text'
источник
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(спасибо комментарию lukaserat выше)источник
cat > FILE.txt
затем нажмите Ctrl + D, когда вы закончите .Я знаю, что это чертовски старый вопрос, но поскольку ОП касается сценариев и того факта, что Google привел меня сюда, следует также упомянуть открытие файловых дескрипторов для чтения и записи одновременно.
Тогда
cat
файл на терминалеВ этом примере файл poem.txt открывается для чтения и записи в файловом дескрипторе 3. Он также показывает, что * nix-окна знают больше fd, чем просто stdin, stdout и stderr (fd 0,1,2). Это на самом деле много держит. Обычно максимальное количество файловых дескрипторов, которое может выделить ядро, может быть найдено
/proc/sys/file-max
или,/proc/sys/fs/file-max
но использование любого fd выше 9 опасно, поскольку может конфликтовать с fd, используемым оболочкой внутри. Так что не беспокойтесь и используйте только fd's 0-9. Если вам нужно больше 9 файловых дескрипторов в bash-скрипте, вы все равно должны использовать другой язык :)В любом случае, fd можно использовать во многих интересных случаях.
источник
Мне нравится этот ответ:
но предложил бы,
cat >> FILE.txt << EOF
если вы хотите просто добавить что-то в конец файла, не стирая то, что уже существуетКак это:
источник
Перемещение моего комментария в качестве ответа в соответствии с просьбой @lycono
Если вам нужно сделать это с правами root, сделайте это так:
источник
echo "some data for the file" | sudo tee -a fileName >/dev/null
запустить толькоtee
как root.В средах, где документы здесь недоступны (
Makefile
иDockerfile
т. Д.), Вы часто можете использовать ихprintf
для разумного и эффективного решения.источник
Я думал, что было несколько совершенно прекрасных ответов, но нет краткого описания всех возможностей; таким образом:
Основным принципом, лежащим в основе большинства ответов здесь, является перенаправление . Два важных оператора перенаправления для записи в файлы:
Перенаправление вывода:
echo 'text to completely overwrite contents of myfile' > myfile
Добавление перенаправленного вывода
echo 'text to add to end of myfile' >> myfile
Здесь документы
Другие упомянутые, а не из фиксированного источника ввода, как
echo 'text'
, вы также могли бы в интерактивном режиме записывать в файлы через «Здесь документ», которые также подробно описаны в ссылке на руководство bash выше. Эти ответы, например,cat > FILE.txt <<EOF
илиcat >> FILE.txt <<EOF
использовать те же операторы перенаправления, но добавить еще один слой через «Здесь документы». В приведенном выше синтаксисе вы пишете в FILE.txt через вывод
cat
. Запись происходит только после того, как для интерактивного ввода задана какая-то конкретная строка, в данном случае «EOF», но это может быть любая строка, например:cat > FILE.txt <<'StopEverything'
илиcat >> FILE.txt <<'StopEverything'
будет работать так же хорошо. Здесь Документы также ищут различные разделители и другие интересные символы синтаксического анализа, поэтому взгляните на документы для получения дополнительной информации об этом.
Здесь Строки
Немного запутанный, и больше упражнений в понимании как перенаправления, так и синтаксиса Here Documents, но вы можете объединить синтаксис стиля Here Document со стандартными операторами перенаправления, чтобы стать Here String:
Перенаправление вывода ввода cat
Добавление перенаправленного вывода ввода catcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
источник
Также можно использовать здесь document и vi, приведенный ниже скрипт генерирует FILE.txt с 3 строками и переменной интерполяцией
Тогда файл будет иметь 3 строки, как показано ниже. «i» - запустить режим вставки vi и аналогичным образом закрыть файл с помощью Esc и ZZ.
источник
это мой ответ $ cat file> copy_file
источник