Spusťte shell uvnitř sudo
:sudo bash -c 'whoami; whoami'
Můžete použít jakýkoli znak kromě '
sám uvnitř jednoduchých uvozovek. Pokud opravdu chcete mít v tomto příkazu jedinou uvozovku, použijte '\''
(což je technicky:koncový literál v jednoduchých uvozovkách, literál '
znak, začátek literál s jednoduchými uvozovkami; ale efektivně je to způsob, jak vložit jednu uvozovku do řetězce literálu s jednou uvozovkou).
Příkazy můžete předat jako standardní vstup do sudo'ed bash pomocí dokumentu zde:
sudo bash <<"EOF"
whoami
id
EOF
Tímto způsobem není třeba si pohrávat se správnými citacemi, zvláště pokud máte více úrovní, např.:
sudo bash <<"EOF"
whoami
echo $USER ~
sudo -u apache bash <<"DOF"
whoami
echo $USER ~
DOF
EOF
Vyrábí:
root
root /root
apache
apache /usr/share/httpd
(Všimněte si, že nemůžete odsadit vnitřní zakončení — musí být na svém řádku samostatně. Pokud chcete použít odsazení v dokumentu here, můžete použít <<-
místo <<
, ale pak musíte odsadit tabulátory, nikoli mezery.)
zkuste například toto, testoval jsem to:
sudo bash -c "cd /;ls;ls|grep o"
V tomto příkladu nejprve změníte adresář na /root, dále vypíšete kořenový adresář a nakonec pro kořenový adresář vyfiltrujete pouze adresáře s názvem s písmenem 'o'.
Ale myslím, že lepší způsob je napsat skript, který udělá vše, co potřebujete, a poskytne výstupní kód pro všechny složité akce. Pak můžete místo skupiny jednotlivých příkazů použít sudo skript jako v příkladu výše.