我需要输出一些文本作为bash脚本,但是在脚本中。我为此使用了猫,但它有一个缺点。 在写入期间解释变量和内容。我确实希望阻止此。
如何做到而不引用所有变量(我的脚本长得太长)?实施例
cat >/tmp/script << EOF
$HOSTNAME
# lots of other stuff I do NOT want to escape like \$VARIABLE
# ...
EOF
cat /tmp/script
myhostname.mylan
我想:
cat /tmp/script
$HOSTNAME
编辑:请注意我的脚本(此处仅 $ HOSTNAME )非常长,我不想更改它。使用&lt;&lt;
时,单引号不起作用cat >/tmp/script '<< EOF
$HOSTNAME
EOF'
File not found: EOF'
诀窍是什么?感谢。
答案 0 :(得分:71)
如果你想要引用的所有内容:
cat << 'EOF'
stuff here with $signs is OK
as are `backquotes`
EOF
请参阅手册中“此处文件”部分。
答案 1 :(得分:3)
逃离$:
cat >/tmp/script << EOF
\$HOSTNAME
EOF
答案 2 :(得分:1)
使用sed:
sed -n '20,30p' "$0"
打印第20至30行,SSCE:
#!/bin/bash
cat >/dev/null << EOF
3
4 $HOSTNAME
5 ls
6 $(ls -l)
7
8 echo 'foo
9 bar'
10
11 echo "Foo
12 $((4+4)) Bar"
EOF
sed -n '3,12p' "$0"
echo "fine?"
使用头/尾也应该工作。
您必须调整数字,如果您使用它并插入或删除行。
答案 3 :(得分:0)
尝试使用echo:
echo '
$HOSTNAME
...
' >> /tmp/script