bash機能があります
yumtelegraf() {
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[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
EOF
sudo yum install telegraf
}
関数でインデントを使用すると、ファイルにタブスペースが印刷されます。
yumtelegraf() {
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[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
EOF
sudo yum install telegraf
}
この行動を避ける方法は?
echoコマンドを使用してこれを達成することもできますか?
ベストアンサー1
たとえば、タブと(ダッシュを含む)を使用する<<-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
あなたの質問にダッシュを残しましたが、\$
拡張から外れているため、ここでは不正確かもしれません。