Por que você não o transforma em um script executável real e chama o script enquanto executa o outro usuário via su
Eu gostaria que esses comandos fossem executados como o usuário ss
de root
mkdir bin
cp -r /opt/gitolite .
gitolite/install -ln
gitolite setup -pk ss.pub
mkdir -p .gitolite/hooks/common
ln -s /opt/pre-receive .gitolite/hooks/common/
então tudo é executado em /home/ss
. A quarta linha requer $HOME/bin
, como você pode ver na terceira linha.
A única maneira de fazer isso funcionar é adicionar su -c "command" ss
a cada linha, o que não é um bom hack.
Esta é uma extensão da minha pergunta , onde eu não era preciso o suficiente.
Pergunta
Como executo todos esses comandos como um script de maneira prática?
Um script de shell é exatamente isso, um script de shell. Isso significa que você não só pode executar comandos normais do shell, mas também pode executar os built-ins para qualquer shell que estiver usando. Poderíamos modificar levemente seu script para que todos os comandos sejam executados como se estivessem no diretório inicial de qualquer usuário que execute esse script.
#!/bin/bash
cd $HOME
mkdir bin
cp -r /opt/gitolite .
gitolite/install -ln
gitolite setup -pk ss.pub
mkdir -p .gitolite/hooks/common
ln -s /opt/pre-receive .gitolite/hooks/common/