Создание выходного файла с многострочным скриптом с помощью echo / linux
пытаюсь создать небольшой скрипт, способный написать часть скрипта в выходной файл без изменений (как есть)
исходный текст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 тоже ...
4 ответов
вам нужно избежать backticks (`):
#!/bin/bash
echo "
yellow=\`tput setaf 3\`
bel=\`tput bel\`
red=\`tput setaf 1\`
green=\`tput setaf 2\`
reset=\`tput sgr0\`
" >> 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
используйте одинарные кавычки для предотвращения разложения:
echo '
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
' >> output.txt
Подробнее см. разница между двойной и одинарной кавычки.
Если ваш текст включает одну цитату, то выше может не работать. В этом случае с помощью здесь doc будет безопаснее. Например, приведенное выше сломается, если вы вставите строку:var='something'
.
используя здесь 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
спасибо chepner
лучшее решение, которое я нашел:
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' >> output
команда проста и велика.
Но это может дать вам '...: Доступ запрещен в сочетании с sudo
.
недавно у меня была проблема с sudo echo 'string \n other string \n' > /path/to/file
что сработало для меня лучше всего:printf "Line1\nLine2\nLine3" | sudo tee --append /path/to/file
это дополнительно, что у вас на самом деле есть строка, напечатанная в stdout, так что вы увидите, что было записано в файл.