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

Вы можете проверить существование с помощью:

if [!-f B/a.txt]
then
  mv a.txt_20170502 B/a.txt
fi

Вы должны заменить a.txt_20170502 и a .txt переменными, которые вы используете в своем скрипте.

3
13.04.2017, 15:36
2 ответа

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

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

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.

3
27.01.2020, 21:39

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

Defaults requiretty

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

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

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

-3
27.01.2020, 21:39

Теги

Похожие вопросы