使用echo/linux使用多行脚本创建输出文件

使用echo/linux使用多行脚本创建输出文件,linux,bash,sed,echo,centos7,Linux,Bash,Sed,Echo,Centos7,尝试创建一个小脚本,能够在不做任何更改的情况下将脚本的一部分写入输出文件(按原样) 源文件文本 echo " yellow=`tput setaf 3` bel=`tput bel` red=`tput setaf 1` green=`tput setaf 2` reset=`tput sgr0 echo"#${green}Installing packages${reset}#" && " >> output.txt 期望输出: yellow=`tput seta

尝试创建一个小脚本,能够在不做任何更改的情况下将脚本的一部分写入输出文件(按原样)

源文件文本

echo "
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0
echo"#${green}Installing packages${reset}#" &&
" >> output.txt
期望输出:

yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0
echo"#${green}Installing packages${reset}#" &&
我得到的是:

yellow=^[[33m
bel=^G
red=^[[31m
green=^[[32m
reset=^[(B^[[m
echo"#${green}Installing packages${reset}#" &&
使用CentOS 7最小新安装
正在寻找应用于完整脚本/文本的解决方案,不需要每行更改一行,我想也可以使用sed来完成…

使用单引号来防止扩展:

echo '
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
' >> output.txt
有关更多详细信息,请参阅


如果您的文本包含单引号,则上述内容可能不起作用。在这种情况下,使用a将更安全。例如,如果插入一行:
var='something'
,上述内容将中断

使用here doc将如下所示:

cat >> output.txt <<'EOF'
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
var='something'
EOF

cat>>output.txt您需要转义倒勾(`):

作为奖励: 我更喜欢对多行使用此方法:

#!/bin/bash
cat << 'EOF' >> output.txt
yellow=$(tput setaf 3)
bel=$(tput bel)
red=$(tput setaf 1)
green=$(tput setaf 2)
reset=$(tput sgr0)
EOF
#/bin/bash
cat>output.txt
黄色=$(tput setaf 3)
贝尔=$(t输出贝尔)
红色=$(tput setaf 1)
绿色=$(tput setaf 2)
重置=$(tput sgr0)
EOF
多亏了切普纳

我找到的最佳解决方案是:

echo '
yellow=$(tput setaf 3)
bel=$(tput bel)
red=$(tput setaf 1)
green=$(tput setaf 2)
reset=$(tput sgr0)
echo"#${green}Installing packages${reset}#"
' >> output
使用此解决方案,所有文本无需修改即可进入输出文件,颜色定义也无需修改即可正常工作。

只是一个后期添加:

echo'string'>>输出
命令简单而强大。 但它可能会将“…:权限被拒绝”错误与
sudo
组合在一起

我最近在sudo
echo'string\n other string\n'>/path/to/file

什么对我最有效:
printf“Line1\nLine2\nLine3”| sudo-tee-append/path/to/file


另外,您还需要将字符串打印到标准输出,这样您就可以看到写入文件的内容。

我知道其中的区别,但在本例中,当我使用单引号时,bash会执行源文件,这意味着“回声”被忽略了fully@eadmineadmin:请解释给您带来意外行为的过程…它只是在执行文件时忽略echo',当echo“工作正常,但在复制时会进行不必要的更改,如图所示higher@eadmineadmin当前位置我认为在这种情况下,Herdeoc会更安全。查看我的编辑。谢谢,用正斜杠覆盖引号,但我有550行的脚本cumming下一步,我想echo会做一些小的(难以追踪的更改),是否有任何解决方案适用于完整的脚本,确保在写入输出文件时不进行任何更改?我不确定为什么要这样移动脚本?您可以将脚本存储起来,只需
cp
即可。我正在创建一个nagios安装/配置脚本,在某些阶段,脚本必须创建一个输出文件,将其上载到从属/远程服务器并在那里运行。我已更新了here文档,通过引用分隔符本身来避免不断引用,这使得here文档的行为就像是一个单引号字符串。另外,更喜欢
$(…)
而不是反勾号。从某种意义上说,
cat
解决方案效率较低,因为它运行一个外部进程,而
echo
是内置的,但在这种情况下,为可读性付出的代价很小。带有前斜杠的第一个解决方案对我来说并不真正有效,因为颜色定义不再以这种方式工作。。但使用括号,所有解决方案都工作正常,echo和cat,以及颜色定义都不需要修改。将使用我发现有用的解决方案更新标题。非常感谢。
echo '
yellow=$(tput setaf 3)
bel=$(tput bel)
red=$(tput setaf 1)
green=$(tput setaf 2)
reset=$(tput sgr0)
echo"#${green}Installing packages${reset}#"
' >> output