Введение
Одной из наиболее распространенных задач при написании сценариев Bash или работе в командной строке Linux является чтение файла и запись в файл.
В этой статье объясняется, как записать текст в файл в Bash, используя операторы и команду перенаправления tee
.
Запись в файл с помощью операторов перенаправления
В Bash перенаправление вывода позволяет захватывать вывод команды и записывать его в файл.
Общий формат для перенаправления и записи вывода в файл выглядит следующим образом:
output > filename
output >> filename
- Оператор перенаправления
>
записывает вывод в определенный файл. Если файл существует, он усекается до нулевой длины. В противном случае файл создается. Будьте очень осторожны при использовании этого оператора, так как вы можете перезаписать важный файл. - Оператор перенаправления
>>
добавляет вывод в заданный файл. Файл создается, если он не существует.
У вас должны быть права на запись в файл. В противном случае вы получите ошибку отказа в доступе.
Вот простой пример, показывающий, как перенаправить вывод команды echo
в файл:
echo "this is a line" > file.txt
Чтобы избежать перезаписи существующих файлов, включите опцию «noclobber» со встроенным set
:
set -o noclobber
echo "this is a line" > file.txt
Вы должны увидеть выходное сообщение, подобное следующему:
bash: file.txt: cannot overwrite existing file
Оператор >|
позволяет переопределить параметр «noclobber» Bash:
set -o noclobber
echo "this is a line" >| file.txt
Оператор >>
добавляет вывод в конец файла, а не перезаписывает файл:
echo "this is a line" >> file.txt
Используйте команду printf
, если вы хотите создать сложный вывод:
printf "Hello, I'm %s.\n" $USER > file.txt
Если вы хотите записать в файл несколько строк, используйте перенаправление документа Heredoc (Heredoc).
Например, вы можете передать содержимое команде cat
и записать его в файл:
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Чтобы добавить строки, измените >
на >>
перед именем файла:
cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Вы можете записать вывод любой команды в файл:
date +"Year: %Y, Month: %m, Day: %d" > file.txt
Вывод команды date
будет записан в файл.
Запись в файл с помощью команды tee
Команда tee
одновременно читает из стандартного ввода и записывает в стандартный вывод и в один или несколько файлов:
echo "this is a line" | tee file.txt
По умолчанию команда tee
перезаписывает указанный файл, например оператор >
. Чтобы добавить вывод в файл, введите команду с параметром -a
( --append
):
echo "this is a line" | tee -a file.txt
Если вы не хотите, чтобы команда tee
записывала в стандартный вывод, вы можете перенаправить ее в /dev/null
:
echo "this is a line" | tee file.txt >/dev/null
Чтобы записать текст более чем в один файл, укажите файлы в качестве аргументов команды tee
:
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
Еще одним преимуществом команды tee
является то, что вы можете использовать ее вместе с командой sudo
и записывать в файлы, принадлежащие другим пользователям. Чтобы добавить текст в файл, для которого у вас нет прав на запись, добавьте sudo
перед tee
:
echo "this is a line" | sudo tee file.txt
Вывод команды echo
передается в качестве входных данных в tee
, который повышает права доступа sudo и записывает текст в файл.
Вывод
В Linux для записи текста в файл используйте операторы перенаправления >
и >>
или команду tee
.