在使用telegra-cli和lua脚本通过telegram运行sh脚本时从sh脚本调用sudo时出现权限被拒绝错误

我正在尝试通过telegram消息运行我的.sh脚本status.sh:

Ubuntu 20.04.1 LTS服务器 使用lua脚本为telegram-cli执行status.sh脚本 当我通过telegram向服务器发送消息“status”时,它会执行status.sh脚本。在此脚本中,我有一大堆用于收集信息并将其发送回telegram给我以查看服务器状态的内容,但是(最近我重新安装了服务器)由于某种原因,如果该脚本有一行代码以sudo开头,我就会得到错误信息: 第38行:/usr/bin/sudo:权限被拒绝

如果我从命令行运行./status.sh脚本,就可以无问题地运行它!所以我认为这是因为它是从telegram或lua中调用的!?

引起错误的代码示例:sudo ifconfig enp0s25 >> file

另一方面,这行代码可以正常工作: sudo echo 时间:$(date +%"H:%M:%S") >> file

/usr/bin的权限设置为0755 sudo的权限设置为4755

点赞
用户1847592
用户1847592

如果需要修改 file 文件需要 root 权限来操作,那么以下命令:

sudo ifconfig enp0s25 >> file

将无法正常工作。

sudo 作用于 ifconfig 命令,但不会作用于重定向操作。

要解决此问题,需要执行以下命令:

sudo sh -c 'ifconfig enp0s25 >> file'
2020-11-15 21:33:50
用户8593689
用户8593689

正如Egor Skriptunoff的回答所提到的,sudo 只影响使用 sudo 运行的命令,不影响重定向。 也许在您的情况下没有东西被写入到 file 中,因为ifconfig 把你感兴趣的输出写到了 stderr 而不是 stdout。

如果要将 stdout 和 stderr 都附加到 file 中,并且以 root 身份运行,请使用以下命令:

sudo sh -c 'ifconfig enp0s25 >> file 2>&1'

在这里,通过 sudo 调用了 sh,以便将重定向到 file 作为 root 进行。

如果没有 2>&1,只有 ifconfig 的 stdout 会被追加到 file 中。2>&1 告诉 shell 将 stderr 重定向到 stdout。

如果可以在没有 root 权限的情况下写入 file,那么可以简化为

sudo ifconfig enp0s25 >> file 2>&1
2020-12-20 22:59:43