Op 20-03-2020 om 15:24 schreef Heiko Noordhof: > 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,
Je hebt helemaal gelijk. Verkeerde test. > 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 Dat kan natuurlijk, maar dan krijg je een shell. Mijn bedoeling was één commando te geven in dit geval. > 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' Het was geen commando waarin een variabele voorkwam. Echter het programma wat gestart werd, gebruikte environment variabelen. Het gaat om het starten van een VNC-server, zoiets dus: sudo /path/vncserver Het rare was dat bovenstaande goed ging als gewone gebruiker, maar als root ging het fout. > 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. Bedankt voor je uitgebreide uitleg! Het probleem is ondertussen opgelost en toch wat complex om hier te bespreken. Groet, Paul -- Paul van der Vlis Linux systeembeheer Groningen https://www.vandervlis.nl/
