Shell:将文件中的许多行写为sudo

时间:2013-07-05 11:30:40

标签: shell

我想使用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 个答案:

答案 0 :(得分:6)

首先,使用带有here-doc而不是一系列回声的cat。它更清洁。你可以使用带有破折号的特殊表格去除前导标签(标签,而不是空格!),让你缩进here-doc以使其脱颖而出。

其次,您可以使用sudo sh -c启动根子shell来重定向为sudo,然后运行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方式将流写入文件的更直接方式。如果真的没有,那真是太遗憾了。

答案 1 :(得分:1)

启动新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

答案 2 :(得分:0)

$ sudo echo "foo
bar
baz" > f

应该有效

答案 3 :(得分:0)

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