Назад | Перейти на главную страницу

Судо внутри цикла?

В стандартной оболочке 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"

и вам не нужно указывать имя пользователя в пути, так как вы уже будете этим пользователем и ~ в любом случае должен быть их домашним директором