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
あなたの質問にダッシュを残しましたが、\$
拡張から外れているため、ここでは不正確かもしれません。
答え2
必要な機能を具体的に有効にするには、<<-
(注)を使用する必要があります。-
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
}
答え3
あなたはそれを使用することができますecho -e "\tblabla"
:
$ echo -e "\tblabla\n\t\tblibli\n\t\t\tbloblo\n"
blabla
blibli
bloblo
Bashのマニュアルページに記載されているように:
If the -e option is given, interpretation of the following backslash-escaped characters is enabled.
[...]
\a alert (bell)
\b backspace
\c suppress further output
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)