如何在 /etc/apache2/sites-available 中使用 sed?

如何在 /etc/apache2/sites-available 中使用 sed?

我正在尝试编写一个脚本来使用sed复制默认为 apache 创建文件并写入一个新文件,用我自己的目录替换/var/www(下面) 。但是,sed 在 sudo 下无法正常运行:我得到一个$DOC_ROOT$NEW_SITES_DIR“没有权限”错误如下:

sudo sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default > $NEW_SITE

我尝试过生成一个子 shell

sudo sh -c "sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default > $NEW_SITE"

并使用球座

sudo sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default | sudo tee $NEW_SITE

但我得到了“没有输入文件”而是错误。

我确信我最后写的两次尝试都有点不对劲。任何建议都将不胜感激。


已回答

感谢大家的帮助。以下是确切的命令:

sudo sed -e "s:$DEF_SITES_DIR:$NEW_SITES_DIR:g" < $DEF_SITE | sudo tee $NEW_SITE

以下是来自的一个关键词此引用

不要为此失眠,但有一天它会派上用场,当你能弄清楚为什么“sudo”在你的命令中的“>”之后不适用时,请记住 tee 并回到这里。

答案1

您的问题是-i。这告诉sed您就地编辑文件,但您通过重定向在 stdin 上提供文件。尝试删除-i

由于接受文件名作为参数,因此实际上无需重定向输入文件sed。如果文件的读取权限受到限制,则sudo sed(不使用重定向)将处理该问题。如果不使用,-i原始文件将保持不变。

如果有必要的话应该sudo tee注意输出的写权限。

相关内容