Вы можете проверить существование с помощью:
if [!-f B/a.txt]
then
mv a.txt_20170502 B/a.txt
fi
Вы должны заменить a.txt_20170502
и a .txt
переменными, которые вы используете в своем скрипте.
Вы пытаетесь изменить содержимое /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
.
Вы не упомянули свой дистрибутив и версию Linux (или unix), которую вы используете, поэтому я иду по касательной, предполагая, что следующая строка находится в вашем / etc / sudoers
Defaults requiretty
, следовательно, вы не может запускать sudo без tty. И когда вы пытаетесь запустить его из сценария, ваше sudo
не запускается, что фактически приводит к повреждению вашей команды chown
.
Попробуйте добавить переключатели -t
или -tt
в свою команду sudo. Это создаст псевдотерминал для запуска вашей цепочки команд sudo
и, надеюсь, будет успешным, но у этой опции также есть свои побочные эффекты, которые здесь не обсуждаются. Вы можете поискать их, если хотите.
Если у вас есть доступ к конфигурации sudo
, вы убираете указанную выше строку в качестве лучшего решения, но этим действием вы устраняете один уровень баррикад, несмотря на то, насколько он слаб.