В стандартной оболочке bash я пытался перехватить файл из домашних каталогов нескольких пользователей, которые находятся на монтировании NFS со сжатым root-доступом, поэтому я не мог просто прочитать их как 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.
Вы можете вызвать другую оболочку, чтобы получить следующий раунд расширения, например
sudo -u "$x" sh -c "cat ~/blah"
и вам не нужно указывать имя пользователя в пути, так как вы уже будете этим пользователем и ~
в любом случае должен быть их домашним директором