установка oh-my-zsh для другого пользователя с правами root в скрипте cloud-init - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь загрузить сервер Ubuntu AWS EC2 с установленным oh-my-zsh для пользователя ubuntu.У меня есть скрипт cloud-init (подробнее здесь ), который запускается от имени пользователя root (с помощью sudo).Итак, в моем скрипте я запускаю установку oh-my-zsh от имени пользователя ubuntu.

#cloud-config
runcmd:
# omitted other commands specific to my server, install zsh at the end
  - apt-get install -y zsh
  - su ubuntu -c 'sh -c "$(curl -fsSL https://raw.githubusercontent.com/coreycole/oh-my-zsh/master/tools/install.sh)"' 
  - chsh -s $(which zsh) ubuntu
# change the prompt to include the server hostname
  - su ubuntu -c echo "echo export PROMPT=\''%{$fg[green]%}%n@%{$fg[green]%}%m%{$reset_color%} ${ret_status} %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'\'" >> /home/ubuntu/.zshrc
# get environment variables defined above
  - echo "source ~/.profile" >> /home/ubuntu/.zshrc

Когда cloud-init заканчивается, и я ssh в цвета не работают в $PROMPT, ясм. [green] и [cyan]:

[green]ubuntu@[green]ip-172-31-27-24  [cyan]~

Если после выполнения команды ssh я запускаю ту же команду PROMPT, что и для пользователя ubuntu, цвета работают правильно:

enter image description here

Похоже, проблема заключается в том, как цвета оцениваются, когда скрипт cloud-init запускает команду echo, по сравнению с тем, как цвета вычисляются, когда пользователь ubuntu запускает echoкоманда.Кто-нибудь знает, как я могу изменить PROMPT, чтобы цвета оценивались только после того, как пользователь ubuntu оценил ~/.zshrc?

1 Ответ

0 голосов
/ 20 сентября 2018

Я решил это благодаря ответу jgshawkey здесь .Я использовал переменные bash, чтобы избежать цветовых кодов и команд, чтобы отложить их оценку:

  - apt-get install -y zsh
  - runuser -l ubuntu -c 'sh -c "$(curl -fsSL https://raw.githubusercontent.com/coreycole/oh-my-zsh/master/tools/install.sh)"' 
  - chsh -s $(which zsh) ubuntu
  - fgGreen='%{$fg[green]%}'
  - fgCyan='%{$fg[cyan]%}'
  - fgReset='%{$reset_color%}'
  - retStatus='${ret_status}'
  - gitInfo='$(git_prompt_info)'
  - runuser -l ubuntu -c "echo export PROMPT=\''${fgGreen}%n@%m${fgReset} ${retStatus} ${fgCyan}%c${fgReset} ${gitInfo}'\'" >> /home/ubuntu/.zshrc
  - echo "source ~/.profile" >> /home/ubuntu/.zshrc

В итоге все выглядело так в моем ~/.zshrc:

enter image description here

...