bash:用sudo权限打开文件描述符

问题描述 投票:-1回答:1

在我的脚本中,我想打开一个特定的(设备驱动程序)文件作为FD 3. exec 3<在常规情况下正常工作。

但是设备驱动程序文件只能以root身份读取,因此我正在寻找一种使用sudo以root身份打开FD的方法。

- >如何使用sudo权限打开文件(描述符)?

不幸的是,我必须为脚本的运行时保持文件打开,因此管道输入或输出等技巧不起作用。另外,我不想在sudo权限下运行整个脚本。

如果根本不可能使用sudo + exec,另一种解决方案就是我可以在像sudo tail -f这样的背景中调用程序 - 但这会带来另一组问题:

  • 如何确定程序调用是否成功
  • 如果调用不成功,如何获取错误消息
  • 如何在执行结束时“杀死”程序。

编辑:澄清我想要实现的目标:

  • 打开/ dev / tpm0,需要root权限
  • 使用用户权限执行我的命令
  • 关闭/ dev / tpm0

这背后的原因是打开/ dev / tpm0阻止其他命令访问tpm,这在我的情况下是至关重要的。

谢谢你的帮助

linux bash sudo
1个回答
0
投票

你可以做以下的事情吗?

# open the file with root privileges for reading
exec 3< <(sudo cat /dev/tpm0)

# read three characters from open file descriptor
read -n3 somechars <&3

# read a line from the open file descriptor
read line <&3

# close the file descriptor
exec 3<&-

为了检测失败的打开,你可以这样做:

exec 3< <(sudo cat /dev/tpm0 || echo FAILEDCODE)

然后当你第一次阅读fd 3时,看看你是否得到了FAILCODE。或者你可以这样做:

rm -f /tmp/itfailed
exec 3< <(sudo cat /dev/tpm0 || touch /tmp/itfailed)

然后检查/tmp/itfailed;如果存在,则sudo命令失败。

© www.soinside.com 2019 - 2024. All rights reserved.