Либо используйте вкладки и<<-EOF
(с дефисом ), либо используйте фильтр вместо кота, например.sed
:
$ sed -e "s/^\s*//" <<EOF
as
df
gh
jk
op # two tabs
EOF
При этом удаляются как пробелы, так и табуляции. Обратите внимание, что закрытие EOF
не может иметь отступ. Вы можете использовать <<" EOF"
, а затем снова " EOF"
с тем же количеством пробелов, что и конечный токен, но кавычки блокируют расширения в документе здесь -, что вам не нужно в данном случае. Сравните:
$ a=x
$ cat <<EOF
"$a"
EOF
"x"
$ cat <<"EOF"
"$a"
EOF
"$a"
Что касается echo
, то у него с этим проблемы. Но вы можете использовать printf
также:
printf "%s\n" \
"[influxdb]" \
"name = InfluxDB Repository - RHEL \$releasever" \
"baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable" \
"enabled = 1" \
"gpgcheck = 1" \
"gpgkey = https://repos.influxdata.com/influxdb.key" \
| sudo tee /etc/yum.repos.d/influxdb.repo
Я оставил тире в \$
, как и в вашем вопросе, но они могут быть здесь неправильными, так как они избегают расширений.