在一个标准的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中指定用户名,因为你已经是该用户了,无论如何,他应该是他们的主目录