Como escrever o script bash sem usar o sudo nele?

1

Como posso escrever um gem install ou apt-get install em bash sem permitir que use sudo ?

#!/usr/bin/env bash

apt-get update -y
apt-get upgrade -y
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable --ruby
source /usr/local/rvm/scripts/rvm
((EUID)) || exit
gem install jekyll
    
por HlT 01.02.2016 / 09:29

1 resposta

2

#!/usr/bin/env bash
((!EUID)) && { # check if the EUID is a zero 
  echo "${0##*/} can not be executed as root " # notify
  exit 1 # exist with status code 1
}
gem install jekyll

desde que você é um administrador (usuário normal) a variável $ EUID sempre maior que zero!
  e na raiz $ EUID = 0

((expressão))               A expressão é avaliada de acordo com as regras descritas abaixo em AVALIAÇÃO ARITMÉTICA. Se o valor da expressão for diferente de zero, o status de retorno será               0; caso contrário, o status de retorno é 1. Isso é exatamente o equivalente a deixar "expressão"

ou

#!/usr/bin/env bash
[[ $EUID = 0 ]] && { # check if the EUID is eq to zero
  echo "${0##*/} can not be executed as root " # notify
  exit 1 # exist with status code 1
}
gem install jekyll

eu prefiro este

((EUID)) || exit 1

ou

((!EUID)) && exit 1

atualizações após a edição da pergunta

#!/usr/bin/env bash
((!EUID)) && {
 #stuff to be exec as root
for option in update 'upgrade -y'
  do
    apt-get $option
  done
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable --ruby
source /usr/local/rvm/scripts/rvm

} || {
 #stuff to be exec as non-root
gem install jekyll

}
exit 0

agora ele será executado em usuários raiz e não-root, mas executará apenas uma parte do script de acordo com o EUID

    
por 01.02.2016 / 09:39