Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I write a heredoc to a file in Bash script?

Tags:

bash

heredoc

How can I write a here document to a file in Bash script?

like image 943
Joshua Enfield Avatar asked Jun 01 '10 20:06

Joshua Enfield


People also ask

What is heredoc in shell?

Here document (Heredoc) is an input or file stream literal that is treated as a special block of code. This block of code will be passed to a command for processing. Heredoc originates in UNIX shells and can be found in popular Linux shells like sh, tcsh, ksh, bash, zsh, csh.

What is a here document in bash?

A HereDoc is a multiline string or a file literal for sending input streams to other commands and programs. HereDocs are especially useful when redirecting multiple commands at once, which helps make Bash scripts neater and easier to understand.


1 Answers

Read the Advanced Bash-Scripting Guide Chapter 19. Here Documents.

Here's an example which will write the contents to a file at /tmp/yourfilehere

cat << EOF > /tmp/yourfilehere These contents will be written to the file.         This line is indented. EOF 

Note that the final 'EOF' (The LimitString) should not have any whitespace in front of the word, because it means that the LimitString will not be recognized.

In a shell script, you may want to use indentation to make the code readable, however this can have the undesirable effect of indenting the text within your here document. In this case, use <<- (followed by a dash) to disable leading tabs (Note that to test this you will need to replace the leading whitespace with a tab character, since I cannot print actual tab characters here.)

#!/usr/bin/env bash  if true ; then     cat <<- EOF > /tmp/yourfilehere     The leading tab is ignored.     EOF fi 

If you don't want to interpret variables in the text, then use single quotes:

cat << 'EOF' > /tmp/yourfilehere The variable $FOO will not be interpreted. EOF 

To pipe the heredoc through a command pipeline:

cat <<'EOF' |  sed 's/a/b/' foo bar baz EOF 

Output:

foo bbr bbz 

... or to write the the heredoc to a file using sudo:

cat <<'EOF' |  sed 's/a/b/' | sudo tee /etc/config_file.conf foo bar baz EOF 
like image 200
Stefan Lasiewski Avatar answered Oct 09 '22 09:10

Stefan Lasiewski