2011-10-24 22 views

答えて

294

構文(<<<)と使用するコマンド(echo)が間違っています。

正しいは次のようになります。

#!/bin/bash 

kernel="2.6.39" 
distro="xyz" 
cat >/etc/myconfig.conf <<EOL 
line 1, ${kernel} 
line 2, 
line 3, ${distro} 
line 4 line 
... 
EOL 

cat /etc/myconfig.conf 
+29

と追加したい場合はcat >> –

+9

これは素晴らしいですが、終了する 'EOF'の前に空白がないことを確認しなければなりません。そうでないと認識されませんファイル_エラーの_unexpectedの終わりに実行されます。 – nwinkler

+0

これには用語がありますか? –

49
#!/bin/bash 
kernel="2.6.39"; 
distro="xyz"; 

cat > /etc/myconfig.conf << EOL 
line 1, ${kernel} 
line 2, 
line 3, ${distro} 
line 4 
line ... 
EOL 

これは何をしたいん。

+5

+1です;-) – ktf

+6

私は速くない入力した@ktfが、あなた未満の手紙。^_ * – Kent

11

ヒアドキュメントソリューションは確かにこれを行うための最も一般的な方法です。他の一般的な解決策は以下のとおりです。

 
echo 'line 1, '"${kernel}"' 
line 2, 
line 3, '"${distro}"' 
line 4' > /etc/myconfig.conf 

 
exec 3>&1 # Save current stdout 
exec > /etc/myconfig.conf 
echo line 1, ${kernel} 
echo line 2, 
echo line 3, ${distro} 
... 
exec 1>&3 # Restore stdout 
+0

さらに興味深いバリエーションを紹介する 'printf'を指しているかもしれません。 – tripleee

13

あなたは変数を交換することにしたくない場合は、単一引用符でEOLを囲む必要があります。

cat >/tmp/myconfig.conf <<'EOL' 
line 1, ${kernel} 
line 2, 
line 3, ${distro} 
line 4 line 
... 
EOL 

前例:メカニズム以下

$ cat /tmp/myconfig.conf 
line 1, ${kernel} 
line 2, 
line 3, ${distro} 
line 4 line 
... 
0

をファイルに複数行をリダイレクトするのに役立ちます。変数の値をリダイレクトできるように、完全な文字列を"の下に置きます。

#!/bin/bash 
kernel="2.6.39" 
echo "line 1, ${kernel} 
line 2," > a.txt 
echo 'line 2, ${kernel} 
line 2,' > b.txt 

a.txtのコンテンツがある

line 1, 2.6.39 
line 2, 

b.txtの内容は、より速く入力するための

line 2, ${kernel} 
line 2, 
関連する問題