Bash: Запись в файл

Bash: Добавить к файлу

Одной из наиболее распространенных задач при написании скриптов 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

Оператор >| позволяет переопределить опцию Bash «noclobber»:

 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

Если вы хотите записать несколько строк в файл, используйте перенаправление Here document (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 .

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

терминал bash

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *