Как писать внутри Bash-файла в Linux

12 set 2022 2 min di lettura
Как писать внутри Bash-файла в Linux
Indice dei contenuti

Введение

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.