如何让Bash脚本输出内容时换行写入文件?
解决Bash脚本写入多行内容的问题
你遇到的问题是用错了换行转义符,下面提供几种可行的解决方法:
方法1:修正echo命令的转义符
把原来的\换成\n,echo -e会解析\n作为换行符:
echo -e "jira.node.id = node$RANDOM\njira.shared.home = /var/sharedhome" | tee -a /var/atlassian/application-data/jira/cluster.properties
方法2:用printf替代echo(更可靠)
printf对转义字符的解析更稳定,跨平台性更好:
printf "jira.node.id = node%d\njira.shared.home = /var/sharedhome\n" $RANDOM | tee -a /var/atlassian/application-data/jira/cluster.properties
方法3:分多次输出(直观易懂)
把两行内容分开echo,或者用大括号组合后一次性追加:
# 分开两次echo echo "jira.node.id = node$RANDOM" | tee -a /var/atlassian/application-data/jira/cluster.properties echo "jira.shared.home = /var/sharedhome" | tee -a /var/atlassian/application-data/jira/cluster.properties # 或者用大括号减少tee调用次数 { echo "jira.node.id = node$RANDOM" echo "jira.shared.home = /var/sharedhome" } | tee -a /var/atlassian/application-data/jira/cluster.properties
方法4:使用Here-Document(适合多行内容)
这种方式直接编写多行文本,变量会自动解析,不需要转义:
tee -a /var/atlassian/application-data/jira/cluster.properties <<EOF jira.node.id = node$RANDOM jira.shared.home = /var/sharedhome EOF
问题原因说明
你之前用的\是用来转义空格的(避免空格被解析为分隔符),并不是换行转义符。echo -e需要识别\n来生成换行,替换后就能得到你想要的多行效果。
内容的提问来源于stack exchange,提问作者Legion_of_boom__
相关产品推荐
相关产品推荐

