On Fri, Mar 20, 2020 at 05:26:58PM +0100, Paul van der Vlis wrote: > 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.
Met `sudo` doe je iets als de super user. (De super user is default, andere users kan ook) `sudo` verandert de "wie", niet de "waar" Elders in deze thread ge-illusteert met `sudo whoami`. Manual page van `whoami` beschrijft kort en krachtig: "print effective userid" > > 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! Ja, aan shell expansie had ook niet meteen aangedacht. Dank. > Het probleem is ondertussen opgelost > en toch wat complex om hier te bespreken. Ja, herkenbaar, dank voor de terugmelding. Groeten Geert Stappers -- Silence is hard to parse
