Er ikke helt sikker på export og miljø variabler i Unix-like OS

Tags:    linux unix bash shell

<< < 123 > >>
Jeg er ikke helt sikker på miljøvariabler og export i Bash og andre shells. Tror jeg har forstået det - så her er min forklaring. True or false?

(Fra StackOverflow)
When you execute a program the child program inherits its environment variables from the parent. For instance if $HOME is set to /root in the parent then the child's $HOME variable is also set to /root.

This only applies to environment variable that are marked for export.


Okay, parent program i det her tilfælde er styresystemet? Også er child program de shells som bliver kørt? Og miljøvariabler er globale variabler som bliver brugt i ALLE childs/shells?

Hvis du bruger export når du ændre en miljøvariabel så ændres den globalt.. Hvis ikke, er det kun i den child/shell du har kørt ændringen i at det ændres. Hvilket vil sige at når du lukker den shell så er din ændring tabt for evigt og miljøvariablen er tilbage til at være det "default", eller hvad nu sidst "exporterede" den til at være? Har jeg ret?



21 svar postet i denne tråd vises herunder
7 indlæg har modtaget i alt 14 karma
Sorter efter stemmer Sorter efter dato
/etc/init.d - hvad er filer der slutter med ".d"? Kender ikke den extension.

---

Kommandofortolker? Går ud fra at det er et "program" skrevet i C, som modtager input og tjekker om det er f. eks echo og hvis det er, så har den fundet kommandoen og vil fortolke den? Eller hvordan?


---

Jeg kan godt kører scripts uden at gøre dem eksekverbare eller køre chmod på dem, de kan eksekveres som default, når jeg dobbeltklikker på dem, spørger den mig om jeg vil åbne i terminal eller gedit.

---

I /usr/local/bin er der et script som hedder "multisystem". Jeg kan ikke se nogen file extension, men når jeg tjekker properties, står der at det er et x-shellscript. Jeg kan køre scriptet ved KUN at skrive multisystem i min shell. Skal hverken skrive "bash" først eller ".sh" til sidst.




/etc/init.d - hvad er filer der slutter med ".d"? Kender ikke den extension.

Ovenstående er et bibliotek...'.d' endelser bruges ofte til biblioteker, som indeholder scripts eller dele af konfigurationsfiler til en daemon.


Kommandofortolker? Går ud fra at det er et "program" skrevet i C, som modtager input og tjekker om det er f. eks echo og hvis det er, så har den fundet kommandoen og vil fortolke den? Eller hvordan?

Tja, mere eller mindre. 'python' er en kommandofortolker, som kan forstå Python kode, 'bash' er en kommandofortolker, som kan forstå 'Bash' kode, 'java' er en fortolker, som kan forstå JVM bytekode. De er typisk skrevet i C, men det er ikke strengt nødvendigt.


I /usr/local/bin er der et script som hedder "multisystem". Jeg kan ikke se nogen file extension, men når jeg tjekker properties, står der at det er et x-shellscript. Jeg kan køre scriptet ved KUN at skrive multisystem i min shell. Skal hverken skrive "bash" først eller ".sh" til sidst.

Det er fordi scriptet ikke har en endelse. Endelser er sjældent nødvendige men kan være en hjælp til dig selv. Nogen (sikkert installations systemet) har lagt 'multisystem' i et directory, som er nævnt i din PATH, og har gjort det eksekverbart med 'chmod +x'. Derfor kan du eksekvere det som var det et program. Første linje i 'multisystem' fortæller hvilken kommandofortolker, som kan eksekvere det.

Prøv følgende:
Fold kodeboks ind/udKode 





Prøv følgende:
Fold kodeboks ind/udKode 



Fold kodeboks ind/udKode 


- Og jeg kan nøjes med at skrive "multisystem" i min shell.. Hvorfor kan jeg ikke bare skriver "Whatever", når den er executable og i det nuværende directory?

"acpi-support" som er et bash script i /etc/init.d har følgende "type" under properties: "shell script (application/x-shellscript)" Det samme har f. eks multisystem. x-shellscript? Er jeg på dybt vand eller hvad? :S



Indlæg senest redigeret d. 16.04.2013 15:09 af Bruger #16945

- Og jeg kan nøjes med at skrive "multisystem" i min shell.. Hvorfor kan jeg ikke bare skriver "Whatever", når den er executable og i det nuværende directory?

Fordi 'nuværende directory' ikke er med i din PATH.


"acpi-support" som er et bash script i /etc/init.d har følgende "type" under properties: "shell script (application/x-shellscript)" Det samme har f. eks multisystem. x-shellscript? Er jeg på dybt vand eller hvad?

Det er dens mime type...det er bare et helt altmindeligt Bash shellscript som du kan se i første linje af scriptet:
Fold kodeboks ind/udKode 





- Og jeg kan nøjes med at skrive "multisystem" i min shell.. Hvorfor kan jeg ikke bare skriver "Whatever", når den er executable og i det nuværende directory?

Fordi 'nuværende directory' ikke er med i din PATH.


"acpi-support" som er et bash script i /etc/init.d har følgende "type" under properties: "shell script (application/x-shellscript)" Det samme har f. eks multisystem. x-shellscript? Er jeg på dybt vand eller hvad?

Det er dens mime type...det er bare et helt altmindeligt Bash shellscript som du kan se i første linje af scriptet:
Fold kodeboks ind/udKode 


Nååååår, alle shellscripts hedder x-shellscripts o.o Hvorfor det?

Tak for alle svarene, it cleared alot up.



Nååååår, alle shellscripts hedder x-shellscripts o.o Hvorfor det?

Øh bøh...ved ikke. Det har MIME guderne bare valgt :-)



Nååååår, alle shellscripts hedder x-shellscripts o.o Hvorfor det?

Øh bøh...ved ikke. Det har MIME guderne bare valgt :-)


Okay XD

Hov, prøvede at ændre PATH sådan så jeg kunne lave en mappe med mine egne shellscripts og python/perl scripts.

Når jeg prøver at:
Fold kodeboks ind/udKode 

eller:
Fold kodeboks ind/udKode 


Åbner den et tomt dokument.. Whyyyy?




Fold kodeboks ind/udKode 



Det er fordi der har sneget sig en ekstra 'sh' ind i filnavnet. Den hedder '.bashrc'


Fold kodeboks ind/udKode 


Ikke alle systemer har '.bash_profile' pr. default, så det er sandsynligvis en ny fil...men den burde stadig blive eksekveret, hvis den findes.



Indlæg senest redigeret d. 16.04.2013 16:24 af Bruger #2695

Fold kodeboks ind/udKode 



Det er fordi der har sneget sig en ekstra 'sh' ind i filnavnet. Den hedder '.bashrc'


Fold kodeboks ind/udKode 


Ikke alle systemer har '.bash_profile' pr. default, så det er sandsynligvis en ny fil...men den burde stadig blive eksekveret, hvis den findes.


Hvornår bliver det her script kørt? - Skal jeg bare skrive "export ${PATH}:/Home/ace/bin" et eller andet sted??




Hvornår bliver det her script kørt? - Skal jeg bare skrive "export ${PATH}:/Home/ace/bin" et eller andet sted??

Det blive kørt når du starter en ny shell, men du kan også køre det manuelt i din nuværende shell. Du skal gøre følgende:

Fold kodeboks ind/udKode 


...så slår ændringerne igennem i din nuværende shell.



<< < 123 > >>
t