[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: