here文本文件,也被称为作heredoc、hereis、here-字串或here-脚本制作,是一种在命令行shell和流程语言表达里定义一个字串的方法。
它可以保存文字里面的自动换行或是缩近等空白字符。一些语言表达可以从字串里推行变量替换和命令替换。
当编写shell脚本,你也许会在某些情况下,你需要将文字或代码的传递给互动型命令,如tee
,cat
或sftp
。
在Bash和Zsh等其他shell中,Heredoc是一种自动跳转类型,它允许我们将每天做输入传递给命令。
[COMMAND] <<[-] 'DELIMITER'
HERE-DOCUMENT
DELIMITER
那也是HereDoc的句法所选用的方法。第一行开始命令COMMAND
是可选择的,脚后跟与众不同操作符<<
和定界符DELIMITER
。
您可以使用一切字符串数组作为定界符DELIMITER
,常见是EOF或END。
在<<
后面加上减号-
可能导致所有流板分节符被忽略。这也使得我们可以在shell操作程序脚本制作时编写内容时运用缩近。不能运用流板空格字符,必须采用分节符。
HERE-DOCUMENT
可以包含字符串数组,变量,命令和其它多种类型输入。最后一行以定界标志符结尾。分节符前面不允许有空格符。
Heredoc案例
在这里节中,我们在这里介绍一些如何使用heredoc的最重要案例。Heredoc最常与cat命令结合使用。
在下面的案例中,大伙儿传递了二行文本,主要包括一个环境变量和whoami
命令再用heredoc。
cat << EOF
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF
从导出来中可以看到,自变量和命令导出来都被替换。让我们一起看看如果将定界符括在反斜杠或冒号中有什么。
你能留意到,如果用灶具导致来时,shell不易做任何基本参数扩展和命令替换。
cat <<- "EOF"
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF
如果是在语句或循环中运用Heredoc,挑选<<-
允许您缩近编号操作过程。
if true; then
cat <<- EOF
Line with a leading tab.
EOF
fi
您可以使用>
,>>
运算符将输出重定向到文本文档,千万不要在屏幕上显示导出来。
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF
倘若file.txt也不会有,如果它创建。使用时>
,文本文档会被遮住,而>>
能把导出来增至word里。
Heredoc输入也可以通过管道传递。在以下案例中,sed
命令将用l
标志符替换所有标志符e
。
cat <<'EOF' | sed 's/l/e/g'
Hello
World
EOF
SSH运用heredoc
运用Heredoc是通过SSH在远程系统上推行好多个命令的最便捷的方法。
运用并没有灶具的定界符时,请确保转义所有变量,命令和特殊字符,要不然她们将在本地被描述,进行命令,变量的替换操作过程。
您仍需要设置依据SSH秘钥无账户登录并输送到Linux服务器。
ssh -T user@host.com << EOF
echo "The current local working directory is: $PWD"
echo "The current remote working directory is: $PWD"
EOF
结论
在教学中,您了解了什么是heredoc
。如何有效在shell操作程序脚本制作中使用这个。如果您有任何问题或意见和建议,请随时。
