у меня есть shell-скрипт хранится в моем местном пользователя (executeAdM.sh
), и когда я выполняю этот скрипт, я переключаюсь на пользователя sudo, принимая команды из файла инструкций. Но когда я выполняю этот сценарий, я также передаю параметры, которые на самом деле являются некоторым путем к каталогу пользователя sudo. Смотрите сценарий ниже.
скрипт для локального пользователя (executeADM.sh
):
#!/bin/bash
echo password | sudo -S -l
sudo /usr/bin/su - user <<EOF
#ls -lrt
pwd
for entry in $(ls -r)
do
if [ "$entry" = "testingADM.sh" ];then
./"$entry" ""
fi
done
EOF
я казню выше как:
./executeADM.sh "/global/u70/globe/ADM"
когда выше сценария, это успешно переключается на другого пользователя, и с пользователем sudo я выполняю for
цикл, который ищет другой скрипт с именем testingADM.sh
.
как только скрипт найден, я запускаю этот скрипт с параметром, переданным от локального пользователя, и testingADM.sh
должны установить путь для меня.
это не работает-он не читает параметр, переданный от локального пользователя.
сценарий пользователя sudo (testingADM.sh
):
#!/bin/bash
changepath=
cd "$changepath"
pwd
когда я жестко переменная path в скрипте, все работает нормально. Но я этого не хочу:
#!/bin/bash
changepath=somepath
cd "$changepath"
pwd
вопрос вместо того, чтобы "/global/u70/globe/ADM"
он принимает путь как "/global/u70/globe/"
, что путь после того, как я делаю sudo
. Он просто не передает переменную.
С ниже предложения, это то, что я в конечном итоге с:
#!/bin/bash
echo password | sudo -S -l
sudo /usr/bin/su - user <<EOF
#ls -lrt
#pwd
echo ""
./testingADM.sh ""
EOF
echo
команда ничего не печатает; пробел отображается. Это сработало, когда я изменил EOF
для EOF
.
может ли кто-нибудь объяснить разницу между:
EOF , "EOF" , 'EOF' , EOF
или первые три имеют одинаковое значение? Тогда в чем разница между ними?