通过 CGI 执行 bash 脚本

executing bash script via CGI

大家好!

我在从浏览器执行 .sh 脚本时遇到问题。 echo 命令运行良好。但是当我将值存储在变量中并将其作为参数传递给另一个脚本时,它不起作用。 感谢任何帮助。

示例:

这里我将 $XX 传递给另一个脚本

if [ -z "$QUERY_STRING" ]; then
    exit 0

其他

 XX=`echo "$QUERY_STRING" | sed -n 's/^.*val_x=\([^&]*\).*$//p' | sed "s/%20/ /g"`
 if [ -z "$XX" ]; then
    echo "X is empty"
 else

    echo "Processing..."
    /sas/oljas_scripts/find_usage_of_tables.sh $XX
    echo "Done"
 fi

 YY=`echo "$QUERY_STRING" | sed -n 's/^.*val_y=\([^&]*\).*$//p' | sed "s/%20/ /g"`
 ZZ=`echo "$QUERY_STRING" | sed -n 's/^.*val_z=\([^&]*\).*$//p' | sed "s/%20/ /g"`
 echo "val_x: " $XX
 echo '<br>'
 echo "val_y: " $YY
 echo '<br>'
 echo "val_z: " $ZZ

fi

您正尝试执行的文件 /sas/oljas_scripts/find_usage_of_tables.sh 对于 Web 服务器来说是不可执行的。目前是:

-rwxrw-r-- 1 sas sas 1540 Nov 12 12:58 find_usage_of_tables.sh

这意味着sas用户可以做任何事情,sas组可以读写但不能执行,其他人只能读。值得注意的是,网络服务器需要能够读取和执行文件,但它未能做到。

要么将文件设置为所有人可读可执行(不推荐):

chmod 755 /sas/oljas_scripts/find_usage_of_tables.sh

或者将文件所在的组设置为web服务器所在的组,并相应地设置文件的组权限:

chmod 754 /sas/oljas_scripts/find_usage_of_tables.sh
chgrp www-data /sas/oljas_scripts/find_usage_of_tables.sh

后者可能需要 sudo。此外,Web 服务器的组名可能不是 www-data - 检查您的 Web 服务器配置,或者像 this answer 建议的那样从进程列表中读取它。