Exécutez un shell dans sudo
:sudo bash -c 'whoami; whoami'
Vous pouvez utiliser n'importe quel caractère sauf '
lui-même à l'intérieur des guillemets simples. Si vous voulez vraiment avoir un guillemet simple dans cette commande, utilisez '\''
(ce qui techniquement est :end single-quote literal, literal '
caractère, début d'un littéral entre guillemets simples ; mais effectivement c'est un moyen d'injecter un guillemet simple dans une chaîne littérale à guillemets simples).
Vous pouvez passer les commandes en tant qu'entrée standard dans bash sudo avec un document ici :
sudo bash <<"EOF"
whoami
id
EOF
De cette façon, il n'est pas nécessaire de jouer avec les citations correctes, surtout si vous avez plusieurs niveaux, par exemple :
sudo bash <<"EOF"
whoami
echo $USER ~
sudo -u apache bash <<"DOF"
whoami
echo $USER ~
DOF
EOF
Produit :
root
root /root
apache
apache /usr/share/httpd
(Notez que vous ne pouvez pas mettre en retrait le terminateur interne - il doit être seul sur sa ligne. Si vous souhaitez utiliser l'indentation dans un document ici, vous pouvez utiliser <<-
au lieu de <<
, mais vous devez alors indenter avec des tabulations, pas des espaces.)
par exemple essayez ceci, je l'ai testé :
sudo bash -c "cd /;ls;ls|grep o"
Dans cet exemple, vous changez d'abord dir en /root, listez ensuite le répertoire racine et enfin pour le répertoire racine, filtrez uniquement les répertoires dont le nom contient la lettre 'o'.
Mais je pense que la meilleure façon est d'écrire un script qui fait tout ce dont vous avez besoin et donne un code de sortie pour toutes les actions complexes. Ensuite, vous pouvez créer un script sudo à la place d'un groupe de commandes uniques comme dans l'exemple ci-dessus.