Re: Sudo en environment
On 3/20/20 1:23 PM, Paul van der Vlis wrote:
Maar nu loop ik hier ook tegenaan bij sudo. Als ik doe:
sudo /bin/echo $USER
Dan krijg ik als antwoord "paul", terwijl als ik als root werk ik graag
de root-environment wil gebruiken. Hoe kan dat?
Hallo Paul,
Als je in je shell een commando uitvoert waarin een variabele voorkomt,
zoals bijv dit:
ls -l $HOME/Documents
Dan wordt door je shell *eerst* de variabele vervangen door zijn waarde,
dus:
ls -l /home/paul/Documents
En dat is dan wat als commando wordt gedraaid.
Zo ook met jouw voorbeeld:
sudo /bin/echo $USER
Eerst wordt de variabele vervangen door zijn waarde en wordt het commando:
sudo /bin/echo paul
En dan wordt het commando "/bin/echo paul" d.m.v. sudo als root gedraaid
en is de output uiteraard gewoon "paul". Het kan verwarrend zijn, maar
magischer dat dit is het niet.
Een complete shell als root draaien via sudo kan op meerdere manieren.
Deze zijn allemaal min of meer gelijkwaardig:
sudo su -
sudo -i
sudo bash
Maar die moet je exit-en als je er klaar bent met commando's als root
doen. Als je per-se een enkel commando als root wilt draaien, dan is dit
misschien een oplossing:
sudo bash -c '/bin/echo $USER'
Door de enkele quotes wordt de variable $USER niet direct vervangen door
zijn waarde. De optie -c betekent: gebruik een string op de command
line als script om te draaien.
Dus sudo start bash als root met als script '/bin/echo $USER'. Die
als-root-draaiende bash vervangt dan wel de variabele door zijn waarde
en de output is dan: "root:
Groeten, Heiko
P.S. Wat ik hier steeds "een variabele door zijn waarde vervangen"
noemde, heet "parameter expansion" in de bash doc's.
Reply to: