我想使用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 .....
我做错了什么?
答案 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执行该脚本。