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

ado*_*ado 1 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
Run Code Online (Sandbox Code Playgroud)

但当:

  sudo   { echo "[mysqld]"                                                                                                                                                                                                                                
  echo "default-character-set=utf8"
  echo "character_set_server=utf8"
  echo "[mysql]"
  echo "default-character-set=utf8"
  } >> /etc/my.conf
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

 sudo: {: command not found 
 character_set_server=utf8
 [mysql]
 default-character-set=utf8 .....
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Tom*_*son 6

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

其次,你可以使用sudo重定向 sudo sh -c启动根子shell来然后在其中运行cat进行重定向.

把它放在一起:

sudo sh -c "cat >>/etc/my.conf" <<-EOF
    [mysqld]
    default-character-set=utf8
    character_set_server=utf8
    [mysql]
    default-character-set=utf8
EOF
Run Code Online (Sandbox Code Playgroud)

我不知道以root方式将流写入文件的更直接的方法.如果真的没有,那真是太遗憾了.