Open hanxi opened 3 years ago
$ cat <<EOF > aaa > bbb EOF aaa bbb
这种用法称为 Here 文档
here文档[1],又称作heredoc、hereis、here-字符串或here-脚本,是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。它可以保存文字里面的换行或是缩进等空白字元。一些语言允许在字符串里执行变量替换和命令替换。 here文档最通用的语法是<<紧跟一个标识符,从下一行开始是想要引用的文字,然后再在单独的一行用相同的标识符关闭。在Unix shell里,here文档通常用于给命令提供输入内容。
here文档[1],又称作heredoc、hereis、here-字符串或here-脚本,是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。它可以保存文字里面的换行或是缩进等空白字元。一些语言允许在字符串里执行变量替换和命令替换。
here文档最通用的语法是<<紧跟一个标识符,从下一行开始是想要引用的文字,然后再在单独的一行用相同的标识符关闭。在Unix shell里,here文档通常用于给命令提供输入内容。
$ cat <<-EOF > aaa > bbb EOF aaa bbb
$ cat << "EOF" > Working dir $PWD > EOF Working dir $PWD
因为默认地,会进行变量替换和命令替换:
$ cat << EOF > Working dir $PWD > EOF Working dir /home/user
用 Python 调用一段 bash 脚本,之前的做法是把 bash 脚本写入文件,然后用 subprocess 调用 bash filename.sh 。但是文件名如果是固定的话,这脚本就不能并行运行了。所以就想到用 bash <<EOF 的办法。
bash filename.sh
bash <<EOF
- cmd = "bash .tmp_run_shell.sh" + cmd = "bash << 'EOF'%sEOF" % script
一开始没给 EOF 加引号,导致 $ 符号相关的命令报错了。通过搜索才发现有加引号的办法,所以记录一下啊。
$
常见的场景
这种用法称为 Here 文档
其他用法
因为默认地,会进行变量替换和命令替换:
缘由
用 Python 调用一段 bash 脚本,之前的做法是把 bash 脚本写入文件,然后用 subprocess 调用
bash filename.sh
。但是文件名如果是固定的话,这脚本就不能并行运行了。所以就想到用bash <<EOF
的办法。一开始没给 EOF 加引号,导致
$
符号相关的命令报错了。通过搜索才发现有加引号的办法,所以记录一下啊。参考资料