Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在apache中作为CGI运行而不是通过命令行运行时,bash脚本的意外输出。如何重现apache特有的bug?_Apache_Bash - Fatal编程技术网

在apache中作为CGI运行而不是通过命令行运行时,bash脚本的意外输出。如何重现apache特有的bug?

在apache中作为CGI运行而不是通过命令行运行时,bash脚本的意外输出。如何重现apache特有的bug?,apache,bash,Apache,Bash,我正在迁移一个在www服务器中运行的遗留bash脚本。我遇到了一个我无法解释的问题 当通过Web服务器(作为包含CGI的脚本)运行时,以下命令: #!/bin/bash set -e -u echo "BP: Statistics generation 1" >/dev/fd/2 echo "BP: one: $1, two: $2" >/dev/fd/2 more ../download/interactions.$1.$2 | grep -v "#" | awk '($2!~/

我正在迁移一个在www服务器中运行的遗留bash脚本。我遇到了一个我无法解释的问题

当通过Web服务器(作为包含CGI的脚本)运行时,以下命令:

#!/bin/bash
set -e -u
echo "BP: Statistics generation 1" >/dev/fd/2
echo "BP: one: $1, two: $2" >/dev/fd/2

more ../download/interactions.$1.$2 | grep -v "#" | awk '($2!~/_R/){print $2}' | sort -k 1 | uniq > rna.names.txt
more ../download/interactions.$1.$2 | grep -v "#" | awk '($1!~/_R/){print $1}' | sort -k 1 | uniq > protein.names.txt
protein.names.txt如下所示:

../download/interactions.3424.asdfjj
507-558_1
::::::::::::::
中间是预期的输出,但第一行和最后一行不是。它们都不包含在interactions.x.y文件中,该文件的开头仅包含一个描述列和数据的标题。测试grep显示确认数据不存在

最奇怪的是,如果我登录到同一台机器并从终端运行脚本(甚至作为www数据运行),那么输出应该是中间行

我尝试在上述命令之前从bash导出env和set,并在运行脚本尝试重新创建服务器上发生的事情之前重新导入它们,但没有成功

脚本本身不是直接调用的,有一个包含CGI的perl脚本执行一个系统调用,通过bash运行脚本


输出的来源是什么?我怎样才能至少复制它呢?

没有必要再使用
了,而且它很可能就是你得到的“::”的来源。
more
是一种分页功能,它需要按键(可能是空格键)来告诉它“显示下一页”。在这种情况下,脚本不会提供任何输入来保持数据移动。我在这里猜测,但是“:”是一个提示字符

超级捷径是给grep文件名,即

grep -v "#" ../download/interactions.$1.$2 | awk '($2!~/_R/){print $2}' | sort -k 1 | uniq > rna.names.txt
或者,如果你的经理对变革持怀疑态度,那么

cat ../download/interactions.$1.$2 | grep -v "#" | awk '($2!~/_R/){print $2}' | sort -k 1 | uniq > rna.names.txt
最后,最有效的解决办法是

   awk '($0 !~ /#/ && $2 !~ /_R/){print $2}' ../download/interactions.$1.$2 | sort -u -k > rna.names.txt
(我认为你不需要在你的$2!~/\u R/测试中使用()

我希望这有帮助