for 循环里面有 Sudo 吗?

for 循环里面有 Sudo 吗?

在标准 bash shell 中,我尝试从几个用户的主目录中 cat 一个文件,这些文件位于 root 压缩的 NFS 挂载上,因此我无法以 root 身份读取它们:

sudo -u userA cat ~userA/blah

.. 运行正常。但是在循环中尝试这个却不起作用:

for x in userA userB userC; do sudo -u $x cat ~$x/blah; done

..没有工作 :

cat: ~userA/blah: Permission denied
cat: ~userB/blah: Permission denied
cat: ~userC/blah: Permission denied

现在还有其他方法可以达到预期的结果,但我想了解的是为什么for 循环不起作用

答案1

我认为这部分可能不起作用,因为操作顺序波浪号扩展发生在参数扩展之前,因此您实际上是在尝试查找一个字面上命名的文件,例如,而不是用户 A 的主目录中~userA/blah命名的文件。blah

你可以调用另一个 shell 来进行下一轮扩展,例如

sudo -u "$x" sh -c "cat ~/blah"

而且你不需要在路径中指定用户名,因为你已经是该用户,而且~无论如何都应该是他们的主目录

相关内容