diff --git a/sources/tech/20171116 How to use a here documents to write data to a file in bash script.md b/sources/tech/20171116 How to use a here documents to write data to a file in bash script.md deleted file mode 100644 index 5fe31f92cf..0000000000 --- a/sources/tech/20171116 How to use a here documents to write data to a file in bash script.md +++ /dev/null @@ -1,205 +0,0 @@ -translating by Flowsnow - -How to use a here documents to write data to a file in bash script -====== - -A here document is nothing but I/O redirection that tells the bash shell to read input from the current source until a line containing only delimiter is seen. -[![redirect output of here document to a text file][1]][1] -This is useful for providing commands to ftp, cat, echo, ssh and many other useful Linux/Unix commands. This feature should work with bash or Bourne/Korn/POSIX shell too. - -## heredoc syntax - -How do I use a heredoc redirection feature (here documents) to write data to a file in my bash shell scripts? [A here document][2] is nothing but I/O redirection that tells the bash shell to read input from the current source until a line containing only delimiter is seen.This is useful for providing commands to ftp, cat, echo, ssh and many other useful Linux/Unix commands. This feature should work with bash or Bourne/Korn/POSIX shell too. - -The syntax is: -``` -command < my_output_file.txt - mesg1 - msg2 - msg3 - $var on $foo -EOF -``` - -OR **redirect and append it** to a file named my_output_file.txt: -``` -command << EOF >> my_output_file.txt - mesg1 - msg2 - msg3 - $var on $foo -EOF -``` - -## Examples - -The following script will write the needed contents to a file named /tmp/output.txt: -``` -#!/bin/bash -OUT=/tmp/output.txt - -echo "Starting my script..." -echo "Doing something..." - -cat <$OUT - Status of backup as on $(date) - Backing up files $HOME and /etc/ -EOF - -echo "Starting backup using rsync..." -``` - - -You can view /tmp/output.txt with the [cat command][3]: -`$ cat /tmp/output.txt` -Sample outputs: -``` - Status of backup as on Thu Nov 16 17:00:21 IST 2017 - Backing up files /home/vivek and /etc/ - -``` - -### Disabling pathname/parameter/variable expansion, command substitution, arithmetic expansion - -Variable such as $HOME and command such as $(date) were interpreted substitution in script. To disable it use single quotes with 'EOF' as follows: -``` -#!/bin/bash -OUT=/tmp/output.txt - -echo "Starting my script..." -echo "Doing something..." -# No parameter and variable expansion, command substitution, arithmetic expansion, or pathname expansion is performed on word. -# If any part of word is quoted, the delimiter is the result of quote removal on word, and the lines in the here-document -# are not expanded. So EOF is quoted as follows -cat <<'EOF' >$OUT - Status of backup as on $(date) - Backing up files $HOME and /etc/ -EOF - -echo "Starting backup using rsync..." -``` - -#!/bin/bash OUT=/tmp/output.txtecho "Starting my script..." echo "Doing something..." # No parameter and variable expansion, command substitution, arithmetic expansion, or pathname expansion is performed on word. # If any part of word is quoted, the delimiter is the result of quote removal on word, and the lines in the here-document # are not expanded. So EOF is quoted as follows cat <<'EOF' >$OUT Status of backup as on $(date) Backing up files $HOME and /etc/ EOFecho "Starting backup using rsync..." - -You can view /tmp/output.txt with the [cat command][3]: -`$ cat /tmp/output.txt` -Sample outputs: -``` - Status of backup as on $(date) - Backing up files $HOME and /etc/ - -``` - -## A note about using tee command - -The syntax is: -``` -tee /tmp/filename </dev/null -line 1 -line 2 -line 3 -$(cmd) -$var on $foo -EOF -``` - -tee /tmp/filename </dev/null line 1 line 2 line 3 $(cmd) $var on $foo EOF - -Or disable variable substitution/command substitution by quoting EOF in a single quote: -``` -tee /tmp/filename <<'EOF' >/dev/null -line 1 -line 2 -line 3 -$(cmd) -$var on $foo -EOF -``` - -tee /tmp/filename <<'EOF' >/dev/null line 1 line 2 line 3 $(cmd) $var on $foo EOF - -Here is my updated script: -``` -#!/bin/bash -OUT=/tmp/output.txt - -echo "Starting my script..." -echo "Doing something..." - -tee $OUT </dev/null - Status of backup as on $(date) - Backing up files $HOME and /etc/ -EOF - -echo "Starting backup using rsync..." -``` - -#!/bin/bash OUT=/tmp/output.txtecho "Starting my script..." echo "Doing something..."tee $OUT </dev/null Status of backup as on $(date) Backing up files $HOME and /etc/ EOFecho "Starting backup using rsync..." - -## A note about using in-memory here-docs - -Here is my updated script: -``` -#!/bin/bash -OUT=/tmp/output.txt - -## in memory here docs -## thanks https://twitter.com/freebsdfrau -exec 9<$OUT - -echo "Starting backup using rsync..." -``` - - - --------------------------------------------------------------------------------- - -via: https://www.cyberciti.biz/faq/using-heredoc-rediection-in-bash-shell-script-to-write-to-file/ - -作者:[Vivek Gite][a] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]:https://www.cyberciti.biz -[1]:https://www.cyberciti.biz/media/new/faq/2017/11/redirect-output-of-here-document-to-a-text-file.jpg -[2]:https://bash.cyberciti.biz/guide/Here_documents -[3]:https//www.cyberciti.biz/faq/linux-unix-appleosx-bsd-cat-command-examples/ (See Linux/Unix cat command examples for more info) diff --git a/translated/tech/20171116 How to use a here documents to write data to a file in bash script.md b/translated/tech/20171116 How to use a here documents to write data to a file in bash script.md new file mode 100644 index 0000000000..f5dadc540d --- /dev/null +++ b/translated/tech/20171116 How to use a here documents to write data to a file in bash script.md @@ -0,0 +1,207 @@ +Bash脚本中如何使用 here 文档将数据写入文件 +====== + +here 文档here document (LCTT译注:here文档又称作 heredoc )不是什么特殊的东西,只是一种 I/O 重定向方式,它告诉bash shell从当前源读取输入,直到读取到只有分隔符的行。 +![redirect output of here document to a text file][1] +这对于向 ftp,cat,echo,ssh 和许多其他有用的 Linux/Unix 命令提供指令很有用。 此功能适用于 bash也适用于 Bourne,Korn,POSIX 这三种 shell。 + +## here 文档语法 + +语法是: +``` +command < my_output_file.txt + mesg1 + msg2 + msg3 + $var on $foo +EOF +``` + +或**重定向并将其追加**到名为my_output_file.txt的文件中: + +``` +command << EOF >> my_output_file.txt + mesg1 + msg2 + msg3 + $var on $foo +EOF +``` + +## 示例 + +以下脚本将所需内容写入名为/tmp/output.txt的文件中: + +``` +#!/bin/bash +OUT=/tmp/output.txt + +echo "Starting my script..." +echo "Doing something..." + +cat <$OUT + Status of backup as on $(date) + Backing up files $HOME and /etc/ +EOF + +echo "Starting backup using rsync..." +``` + +你可以使用[cat命令][3]查看/tmp/output.txt文件: + +``` +$ cat /tmp/output.txt +``` + +示例输出: + +``` + Status of backup as on Thu Nov 16 17:00:21 IST 2017 + Backing up files /home/vivek and /etc/ + +``` + +### 禁用路径名/参数/变量扩展,命令替换,算术扩展 + +像 $HOME 这类变量和像 $(date) 这类命令在脚本中会被解释为替换。 要禁用它,请使用带有 'EOF' 这样带有单引号的形式,如下所示: + +``` +#!/bin/bash +OUT=/tmp/output.txt + +echo "Starting my script..." +echo "Doing something..." +# No parameter and variable expansion, command substitution, arithmetic expansion, or pathname expansion is performed on word. +# If any part of word is quoted, the delimiter is the result of quote removal on word, and the lines in the here-document +# are not expanded. So EOF is quoted as follows +cat <<'EOF' >$OUT + Status of backup as on $(date) + Backing up files $HOME and /etc/ +EOF + +echo "Starting backup using rsync..." +``` + +你可以使用[cat命令][3]查看/tmp/output.txt文件: + +``` +$ cat /tmp/output.txt +``` + +示例输出: + +``` + Status of backup as on $(date) + Backing up files $HOME and /etc/ + +``` + +## 关于 tee 命令的使用 + +语法是: +``` +tee /tmp/filename </dev/null +line 1 +line 2 +line 3 +$(cmd) +$var on $foo +EOF +``` + +或者通过在单引号中引用EOF来禁用变量替换和命令替换: + +``` +tee /tmp/filename <<'EOF' >/dev/null +line 1 +line 2 +line 3 +$(cmd) +$var on $foo +EOF +``` + +这是我更新的脚本: +``` +#!/bin/bash +OUT=/tmp/output.txt + +echo "Starting my script..." +echo "Doing something..." + +tee $OUT </dev/null + Status of backup as on $(date) + Backing up files $HOME and /etc/ +EOF + +echo "Starting backup using rsync..." +``` + +## 关于内存 here 文档的使用 + +这是我更新的脚本: +``` +#!/bin/bash +OUT=/tmp/output.txt + +## in memory here docs +## thanks https://twitter.com/freebsdfrau +exec 9<$OUT + +echo "Starting backup using rsync..." +``` + + + +-------------------------------------------------------------------------------- + +via: https://www.cyberciti.biz/faq/using-heredoc-rediection-in-bash-shell-script-to-write-to-file/ + +作者:[Vivek Gite][a] +译者:[Flowsnow](https://github.com/Flowsnow) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.cyberciti.biz +[1]: https://www.cyberciti.biz/media/new/faq/2017/11/redirect-output-of-here-document-to-a-text-file.jpg +[2]: https://bash.cyberciti.biz/guide/Here_documents +[3]: https//www.cyberciti.biz/faq/linux-unix-appleosx-bsd-cat-command-examples/ "See Linux/Unix cat command examples for more info" \ No newline at end of file