chown не работает через скрипт

У меня есть сценарий:

#! /bin/bash sudo chown -R $USER:$USER /opt/Folder 

Чаун, похоже, не выполняет.

Если я просто напишу вышеприведенную строку с терминала, она работает нормально!

Я прочитал это, но не помог.

Имя скрипта – mysetup.sh, и я запускаю sudo sh mysetup.sh .

Это не дает выхода.

Если я запускаю его как sudo bash -x mysetup.sh , я получаю:

sudo chown -R root:root /opt/Folder

Эта проблема не связана с этим , поскольку установлен USER.

Вы пытаетесь изменить содержимое /opt/Folder на свой собственный идентификатор пользователя, не так ли.

Вот ваша команда еще раз:

 sudo chown -R $USER:$USER /opt/Folder 

Это работает из командной строки, потому что переменная $USER вычисляется до выполнения команды, и поэтому она выполняется как это (при условии, что ваше имя пользователя george ):

 sudo chown -R george:george /opt/Folder 

С другой стороны, когда вы запускаете команду с sudo , между прочим, переменная $USER принимает значение целевого пользователя, который в этом случае является root . Итак, запустив sudo bash mysetup.sh вы запустили mysetup.sh как root, поэтому команда запускается с $USER установленным в root и оценивается как это

 sudo chown -R root:root /opt/Folder 

Решение в вашем случае состоит в том, чтобы избежать запуска всего скрипта в sudo и позволить скрипту использовать sudo где это необходимо, для запуска определенных команд с повышенными привилегиями. Другими словами, используйте bash mysetup.sh вместо sudo bash mysetup.sh .

Вы не указали свой дистрибутив и версию Linux (или unix), в которой вы работаете, поэтому я собираюсь затронуть тангенс, предполагая, что следующая строка находится в вашем /etc/sudoers

 Defaults requiretty 

поэтому вы не можете запускать sudo без tty. И когда вы пытаетесь запустить его из сценария, ваше sudo не запускается, эффективно искажая вашу команду chown .

Попробуйте добавить ключи -t или -tt в команду sudo. Они создадут псевдотерминал для запуска вашей команды sudo и, надеюсь, будут успешными, но этот вариант также имеет свои побочные эффекты, а не обсуждаться здесь. Вы можете искать их, если хотите.

Если у вас есть доступ к конфигурации sudo , вы берете линию, упомянутую выше для лучших решений, но с этим действием вы устраняете один уровень баррикад, несмотря на то, насколько он слаб.