在标准的 bash shell 中,我试图从几个用户的主目录中捕获一个文件,这些目录位于根压缩的 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 循环不起作用
我认为这部分可能由于操作顺序而无法正常工作。波浪号扩展发生在参数扩展之前,因此您实际上是在尝试查找一个按字面命名的文件,例如,
~userA/blah
不是blah
在用户 A 的主目录中命名的文件。您可以调用另一个 shell 来进行下一轮扩展,例如
并且您不需要在路径中指定用户名,因为您已经是该用户并且
~
应该是他们的主目录