Вопрос или проблема
Я пытаюсь запустить следующий скрипт в 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
Примечания к исправленному коду:
-
Использование одинарных кавычек: В целях предотвращения путаницы одинарные кавычки облегчают интерпретацию содержимого внутри команды.
-
Экранирование: Для того чтобы включать одинарные кавычки внутри строки, используются обратные слеши (
'\''
), что позволит корректно передать строку в командуgsettings
.
Заключение
Проблемы с кавычками и синтаксисом в скриптах являются распространёнными и могут вызывать затруднения при выполнении команд. В данном случае ключевым моментом было использовать правильный формат кавычек или экранирование, что решает проблемы с интерпретацией и позволяет выполнить команду для разных пользователей без ошибок. Применение указанного выше решения должно помочь устранить текущие сложности.
Если у вас остались дополнительные вопросы или вам требуется дальнейшая помощь, пожалуйста, не стесняйтесь обращаться!