1

シェルを使用して「sudo」として/etc/my.confに行を追加したい。

sudo としてログに記録しなくても、次のことができます。

{ echo "[mysqld]"                                                                                                                                                                                                                                
  echo "default-character-set=utf8"
  echo "character_set_server=utf8"
  echo "[mysql]"
  echo "default-character-set=utf8"
} >> /etc/my.conf

でもいつ:

  sudo   { echo "[mysqld]"                                                                                                                                                                                                                                
  echo "default-character-set=utf8"
  echo "character_set_server=utf8"
  echo "[mysql]"
  echo "default-character-set=utf8"
  } >> /etc/my.conf

エラーが発生します:

 sudo: {: command not found 
 character_set_server=utf8
 [mysql]
 default-character-set=utf8 .....

私は何を間違っていますか?

4

4 に答える 4

7

まず、一連のエコーではなく、ヒアドキュメントで cat を使用します。それはずっときれいです。先頭のタブ (スペースではなくタブです!) を削除するダッシュ付きの特別なフォームを使用して、ヒアドキュメントをインデントして目立たせることができます。

次に、root サブシェルを起動するために を使用して sudo としてリダイレクトを実行できますsudo sh -c。このサブシェルで、リダイレクトを実行する cat を実行します。

それを一緒に入れて:

sudo sh -c "cat >>/etc/my.conf" <<-EOF
    [mysqld]
    default-character-set=utf8
    character_set_server=utf8
    [mysql]
    default-character-set=utf8
EOF

ストリームをルートとしてファイルに書き込むより直接的な方法を知りません。本当に無いのはもったいない。

于 2013-07-05T11:48:17.947 に答える
0
$ sudo echo "foo
bar
baz" > f

動作するはずです

于 2013-07-05T11:42:31.500 に答える
0

すべてを簡単にするために、コマンドをスクリプトに配置し、sudo にそのスクリプトを実行させる必要があります。

于 2013-07-05T11:47:25.833 に答える