1

我想使用 Shell 将行添加到 /etc/my.conf 作为“sudo”。

如果不以 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 与 here-doc 一起使用,而不是一系列 echo。干净多了。您可以使用带有破折号的特殊形式,它会去除前导制表符(制表符,而不是空格!),让您缩进 here-doc 以使其突出。

其次,您可以使用 sudosudo 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

我不知道以root身份将流写入文件的更直接方法。如果真的没有,那就太可惜了。

于 2013-07-05T11:48:17.947 回答
2

启动新 shell 的另一种方法是使用以下tee命令:

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

或者

sudo tee -a /etc/my.conf >/dev/null <<-EOF
    [mysqld]
    default-character-set=utf8
    character_set_server=utf8
    [mysql]
    default-character-set=utf8
EOF
于 2013-07-05T14:28:25.740 回答
0
$ sudo echo "foo
bar
baz" > f

应该管用

于 2013-07-05T11:42:31.500 回答
0

为了使一切更容易,您应该将命令放在脚本中,然后让 sudo 执行该脚本。

于 2013-07-05T11:47:25.833 回答