Скрипт с командой от имени другого пользователя

Вопрос или проблема

Я пытаюсь запустить следующий скрипт в Ubuntu –


declare -a loggedOnUsers

readarray -t loggedOnUsers < <( w -h | awk '{print $1}' )

for loggedOnUser in "${loggedOnUsers[@]}"

do

/bin/su -c "gsettings set org.gnome.shell favorite-apps "['google-chrome.desktop','org.gnome.Nautilus.desktop']"" - $loggedOnUser

done

Это работает для другой команды в другом скрипте без проблем. Я думаю, что дело в кавычках и двойных кавычках, которые вызывают ошибки, но я не могу понять, как это исправить. Может, кто-то подскажет, где я ошибся?

Ответ или решение

Ваша задача связана с выполнением скрипта в Ubuntu с использованием команды su для изменения системных настроек для разных пользователей. Судя по предоставленному коду, проблема может заключаться в ошибочном использовании кавычек, что приводит к проблемам с синтаксисом. Давайте подробно проанализируем ваш скрипт и предложим решение.

Анализ предоставленного кода

Ваш скрипт выглядит следующим образом:

declare -a loggedOnUsers

readarray -t loggedOnUsers < <( w -h | awk '{print $1}' )

for loggedOnUser in "${loggedOnUsers[@]}"
do
    /bin/su -c "gsettings set org.gnome.shell favorite-apps "['google-chrome.desktop','org.gnome.Nautilus.desktop']"" - $loggedOnUser
done

Проблема с кавычками

Ключевая проблема в приведённом вами примере состоит в том, как вы оформляете строку команды gsettings. Внутри двойных кавычек вы ещё раз используете двойные кавычки для элемента списка. Это приводит к путанице для оболочки с интерпретацией строки.

Рекомендации по исправлению

Для корректной работы команды рекомендую использовать одинарные кавычки для списка приложений (или экранирование двойных кавычек). Вот вариант исправленного кода:

declare -a loggedOnUsers

readarray -t loggedOnUsers < <( w -h | awk '{print $1}' )

for loggedOnUser in "${loggedOnUsers[@]}"
do
    /bin/su -c 'gsettings set org.gnome.shell favorite-apps "['\''google-chrome.desktop'\'', '\''org.gnome.Nautilus.desktop'\'']"' - $loggedOnUser
done

Примечания к исправленному коду:

  1. Использование одинарных кавычек: В целях предотвращения путаницы одинарные кавычки облегчают интерпретацию содержимого внутри команды.

  2. Экранирование: Для того чтобы включать одинарные кавычки внутри строки, используются обратные слеши ('\''), что позволит корректно передать строку в команду gsettings.

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...