当 cp 成功时,将字符串回显到文件中失败

echo string into file fails when cp succeeds

OS: Ubunutu 14.04

在 /home/ubuntu 目录中,我创建了以下脚本:

echo >000-default.conf.test
sudo cp 000-default.conf.test /etc/apache2/sites-enabled/000-default.conf.test
sudo echo 'this is a test'>> /etc/apache2/sites-enabled/000-default.conf.test
sudo cat /etc/apache2/sites-enabled/000-default.conf.test

当我 运行 脚本时,我收到以下错误消息:

./test_f.sh: line 3: /etc/apache2/sites-enabled/000-default.conf.test: Permission denied

复制操作成功时我收到错误消息的原因是什么?

当然可以。

将输出重定向到文件是由 shell 完成的,而不是由 sudo 完成的。因此,如果 shell 在非特权用户下是 运行,那么 >> 会在 sudo 获得特权之前被调用。

您可以使用以下方法:

echo >000-default.conf.test
sudo cp 000-default.conf.test /etc/apache2/sites-enabled/000-default.conf.test
echo 'this is a test' | sudo tee -a /etc/apache2/sites-enabled/000-default.conf.test >/dev/null
sudo cat /etc/apache2/sites-enabled/000-default.conf.test

顺便说一句,而不是

echo >000-default.conf.test

你可以使用

touch 000-default.conf.test

甚至

>000-default.conf.test