Sudo里面的循环?

在一个标准的bash shell中,我试图从几个用户的主目录中find一个文件,这个文件位于根压扁的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循环不起作用

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

你可以调用另一个shell来获得下一轮的扩展

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

你不需要在path中指定用户名,因为你已经是该用户了,无论如何,他应该是他们的主目录