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

时间:2017-12-18 13:31:36

标签: linux bash sudo

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

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

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

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

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

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

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

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

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

感谢您的帮助

1 个答案:

答案 0 :(得分: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命令失败。