在标准 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"
而且你不需要在路径中指定用户名,因为你已经是该用户,而且~
无论如何都应该是他们的主目录