查找并替换CGI脚本

时间:2014-09-11 18:26:27

标签: bash replace cgi

我正在尝试使用CGI脚本在特定文本文件上运行查找和替换命令。

我目前有一个CGI脚本(foo.sh),然后执行非CGI shell脚本(bar.sh)。在非CGI shell脚本(bar.sh)中,我能够执行许多简单的bash命令,如wget,mkdir和cd,并且我还能够使用标准点执行.js文件 - 斜杠bash语法。

然而,当使用CGI执行时,我无法获得任何查找和替换命令。我尝试过sed,awk和perl,当直接在命令行上使用或者从命令行执行bar.sh时,所有这些都可以正常工作。但是一旦我尝试从浏览器执行CGI脚本,find和replace命令就不再有效了。

我尝试过的语法如下。任何建议表示赞赏。

sed -i 's/foo/bar/g' text.txt

{ rm text.txt && awk '{gsub("foo", "bar", $0); print}' > text.txt; } < text.txt

perl -p -i -e 's/foo/bar/g' text.txt

2 个答案:

答案 0 :(得分:1)

只是一些想法:

  • 如果由Web服务器运行,该脚本可能会以不同的用户身份执行,这可能会导致与权限相关的问题。
  • 也许awk / sed等命令不在Web服务器进程使用的路径中(尝试在这里使用绝对路径)
  • Web服务器的错误日志中有什么内容吗?

答案 1 :(得分:0)

感谢迈克尔的投入,并对迟到的回复感到抱歉。你是正确的,因为这是一个权限问题,因为CGI脚本不像我那样运行,而是作为“www-data”用户运行。

发生问题是因为该用户没有写入权限来执行目标文件夹上的sed find and replace命令(在本例中是/ usr / share /中的目录)。

我将目标文件夹的权限更改为完全读/写所有人,现在脚本成功运行。

再次感谢。