我正在制作一个网站,用于课堂作业成绩管理。用户需使用用户名和密码登录,之后进入页面即可查看成绩。
这个网站是由一份名为“bash脚本”的文件(Github链接)运行的,并将托管在已有用户登录凭证的机器上。
我还编写了一个叫做“calcgrade.sh”的脚本,它能够计算当前登录用户或通过参数传递给脚本的其他用户的成绩。
最初,我打算使用下面这个命令:
要运行网站用户的
因此,经过一些阅读,我发现更好的选项是使用
当我运行这个脚本时,似乎不能使用
你能看出我的脚本有什么问题吗?或者你能想到更好的方法来实现我的需求吗?
此外,使用这种方法的另一个问题是,
这个网站是由一份名为“bash脚本”的文件(Github链接)运行的,并将托管在已有用户登录凭证的机器上。
我还编写了一个叫做“calcgrade.sh”的脚本,它能够计算当前登录用户或通过参数传递给脚本的其他用户的成绩。
最初,我打算使用下面这个命令:
echo -e "$password\n" | sudo -Sk -u $user ./website/calcgrade.sh
要运行网站用户的
calcgrade.sh
脚本,但我发现sudo
要求当前登录的用户输入密码,而不是你尝试以命令运行的目标用户。因此,经过一些阅读,我发现更好的选项是使用
su
与一个expect
脚本,但我无法使其工作。这是expect
脚本的代码(目前为了测试用户名和密码已硬编码):#!/usr/bin/expect
log_user 0
spawn /bin/su myusername
expect "Password: "
send "mypassword"
spawn "./website/calcgrade.sh"
interact
当我运行这个脚本时,似乎不能使用
su
登录用户,因为它继续使用我的账户运行calcgrade.sh
,而不是用户的账户。你能看出我的脚本有什么问题吗?或者你能想到更好的方法来实现我的需求吗?
此外,使用这种方法的另一个问题是,
calcgrade.sh
应该向stderr
发送一些输出,但是当我使用expect
脚本运行它时,错误消息被发送到网站(服务器通过将网站的html发送到stdout
来工作)。有没有办法解决这个问题,或者使用expect
脚本只检查用户名/密码是否正确,然后再运行./calcgrade.sh $user
会更好呢?