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

Одной из самых распространенных задач при написании сценариев Bash или работе в командной строке Linux является чтение и запись файлов.

В этой статье объясняется, как записать текст в файл в Bash, используя операторы перенаправления и команду tee.

Запись в файл с помощью операторов перенаправления вывода

В Bash перенаправление вывода позволяет перехватить вывод команды и записать его в файл.

Общий формат для перенаправления и записи вывода в файл следующий:

  • вывод > имя файла
  • вывод >> имя файла

Оператор перенаправления > записывает вывод в заданный файл. Если файл существует, он усекается до нулевой длины. В противном случае файл создается. Будьте очень осторожны при использовании этого оператора, так как вы можете перезаписать важный файл.

Оператор перенаправления >> добавляет вывод в заданный файл. Файл создается, если он не существует.

Вам необходимо иметь права на запись в файл. В противном случае вы получите ошибку с отказом в разрешении.

Вот простой пример, показывающий, как перенаправить вывод команды echo в файл:

Чтобы предотвратить перезапись существующих файлов, включите опцию "noclobber" с помощью встроенного параметра set:

Оператор >| позволяет отменить опцию Bash "noclobber":

Оператор >> добавляет вывод в конец файла, а не перезаписывает его:

Используйте команду printf для создания сложного вывода:

Если вы хотите записать в файл несколько строк, используйте перенаправление Here document (Heredoc).

Например, вы можете передать содержимое в команду cat и записать его в файл:

Чтобы добавить строки, замените > на >> перед именем файла:

Вы можете записать вывод любой команды в файл:

Вывод команды date будет записан в файл.

Запись в файл с помощью команды tee

Команда tee читает со стандартного ввода и записывает на стандартный вывод и в один или несколько файлов одновременно.

По умолчанию команда tee перезаписывает указанный файл, как и оператор >. Чтобы добавить вывод в файл, вызовите команду с опцией -a (--append):

Если вы не хотите, чтобы tee писал в стандартный вывод, вы можете перенаправить его в /dev/null:

Чтобы записать текст в более чем один файл, укажите файлы в качестве аргументов команды tee:

Еще одним преимуществом команды tee является то, что вы можете использовать ее в сочетании с sudo и записывать в файлы, принадлежащие другим пользователям. Чтобы добавить текст в файл, на который у вас нет прав на запись, добавьте sudo перед tee:

Вывод команды echo передается в качестве входных данных команде tee, которая повышает разрешения sudo и записывает текст в файл.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий