因此,我有一个安装程序脚本,该脚本在某一时刻会将多行写入文件。这是另一个脚本。我希望它回显:
cat > $BASEDIR/start.sh << EndOfMessage
cd $BASEDIR/
VER=$(ls | grep --exclude-dir="Spigot" "spigot" | sort -nr)
java -Xmx1024M -XX:MaxPermSize=128M -jar "$VER" -o true
sleep 5
echo "Restarting..." && bash $BASEDIR/start.sh
EndOfMessage
但是,它用空格替换了“$VAR”,并且省略了一些其他行。有没有办法完全按照那里显示的那样回显所有内容?我更喜欢将它们全部放在同一个脚本中。
答案1
您可以转义此处文档中的所有美元符号,或者仅引用文档结束字符串(关闭文档内的所有扩展):
cat > $BASEDIR/start.sh << 'EndOfMessage' # Quotes prevent expansions in the here-doc
cd $BASEDIR/
VER=$(ls | grep --exclude-dir="Spigot" "spigot" | sort -nr)
java -Xmx1024M -XX:MaxPermSize=128M -jar "$VER" -o true
sleep 5
echo "Restarting..." && bash $BASEDIR/start.sh
EndOfMessage