Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Linux bash a environment

Měl bych tu takovej problémek. Mám bash skript, kterým si zapisuji do /etc/environment

například

sed -i '$ a\FS_ORACLE_CLIENT_PATH=/srv/oracle/' /etc/environment;

ovšem po vykonání těchto příkazů musím celý PC resetnout. nejde to nějak obejít? Jde mi o to, aby tyto proměnné byly dostupné ihned a neustále i po resetu

Další problém co mám je if.

.....
echo '==============================';

if grep 127.0.0.2 /etc/hosts
then 
	echo "HOSTS soubor je v poradku";
else
	echo "HOSTS soubor je jiz v poradku";
	sed -i "$ a\ 127.0.0.2 `hostname`.`dnsdomainname` `hostname`" /etc/hosts;
fi

echo '==============================';
echo 'Spoustim prvotni nastaveni';
echo '==============================';
#sh ./config.sh;
.....

nevím proč, ale bez středníků mi to nic neudělá a s nima to funguje. Ovšem pokud je v tom skriptu i tento IF tak mi to zahlásí error ("syntax error: unexpected end of file") a nepokračuje.

loading...
Předmět Autor Datum
1. Stačí, keď sa odhlásiš a prihlásiš. Každý proces má svoje premenné prostredia a tie sa pri spust…
los 19.07.2012 10:21
los
co se týče bodu 1, nezkusil jsem ještě ad2) přidal jsem středník a stále stejný problém echo '====…
tomas.kulhanek 19.07.2012 15:45
tomas.kulhanek
ono by mělo stačít ten /etc/environment spustit ;-) edit: ten if je špatně, celý grep musíš dát do…
touchwood 19.07.2012 15:54
touchwood
edit: ten if je špatně, celý grep musíš dát do hranatozávorkové klauzule a přidat pravou stranu, neb…
tomas.kulhanek 19.07.2012 16:03
tomas.kulhanek
a co se týká environment, tak spustit to nestaci.. nyni jsem to zkusil otázka co v něm je, některé…
touchwood 19.07.2012 16:15
touchwood
ad1) v /etc/environment je toto FS_ORACLE_CLIENT_PATH=/srv/oracle/ a podobné ad2) děkuji, hned zk…
tomas.kulhanek 19.07.2012 18:49
tomas.kulhanek
ad 2: #!/bin/bash grep 127.0.0.1 /etc/hosts if [ $? -eq 0 ] then echo "Nasel" else echo "Nenasel, n…
touchwood 19.07.2012 19:42
touchwood
ad1) Jedná se o skript pomocí kterého nainstalujeme celej náš produkt ve firmě. Potřebuji nastavit n…
tomas.kulhanek 19.07.2012 19:55
tomas.kulhanek
proč tam máš ty středníky? edit: jinak tohle ti fungovat nemůže: #for line in $(cat /etc/environm…
touchwood 19.07.2012 20:01
touchwood
pokud je tam nedám, tak to celé nejede.. nechápu... na centosu to jde bez střevníků, ale na Suse ent…
tomas.kulhanek 19.07.2012 20:05
tomas.kulhanek
v čem to edituješ?
touchwood 19.07.2012 20:09
touchwood
na windows v notepad++ a na suse ve vimu
tomas.kulhanek 19.07.2012 20:10
tomas.kulhanek
no a to jen IMHO ten problém. podle mě tam máš blbě cr+lf takže schválně zkus pomazat konce řádek…
touchwood 19.07.2012 20:12
touchwood
takže v linuxu editovat... ok, ono asi budou hrát ty střevníky...
tomas.kulhanek 19.07.2012 20:18
tomas.kulhanek
v com konkretne je nano lepsie? podla mna sa Vimu vyrovna maloktory textovy editor ... ak vobec neja…
wam_Spider007 19.07.2012 20:22
wam_Spider007
mně osobně vyhovují co nejjednodušší editory, protože přecházím mezi různými prostředími. A ač s vi(…
touchwood 19.07.2012 20:32
touchwood
Souhlasím s pořadím editorů :-) vi je možná mocný nástroj, když se s tím člověk několik hodin učí a…
JR_Ewing 20.07.2012 06:33
JR_Ewing
abych pravdu řekl, tak na vi(m) jsem si zvykl, ale u toho nano tu teď nadávám :)
tomas.kulhanek 20.07.2012 08:31
tomas.kulhanek
Len niekolko hodin? Na Vimku je stale co objavovat :-D a denne sa clovek dozvie nieco nove. Osobne h…
wam_Spider007 20.07.2012 11:29
wam_Spider007
"I'm too sexy to remember vim commands" :-) poslední
touchwood 20.07.2012 11:47
touchwood
Nestaci len niekam zapisat to co by malo byt v ENV nastavene. System sa nepozera do ext.suboru v nej…
KiloViktor 19.07.2012 10:22
KiloViktor

1. Stačí, keď sa odhlásiš a prihlásiš.

Každý proces má svoje premenné prostredia a tie sa pri spustení nového procesu dedia z rodičovského procesu. Ak ti stačí zmeniť premenné prostredia pre aktuálny proces, tak použi príkaz export. Podprocesy, ktoré následne tento proces vytvorí, budú mať potom tiež správne nastavené premenné prostredia.

Napr. pre nastavenie premenných prostredia z /etc/environment:

for line in $(cat /etc/environment); do export $line; done

2. Za if (tesne pred then) má byť bodkočiarka.

co se týče bodu 1, nezkusil jsem ještě

ad2)
přidal jsem středník a stále stejný problém

echo '==============================';

if grep 127.0.0.2 /etc/hosts;
then 
	echo "HOSTS soubor je v poradku";
else
	echo "HOSTS soubor je jiz v poradku";
	sed -i "$ a\ 127.0.0.2 `hostname`.`dnsdomainname` `hostname`" /etc/hosts;
fi

echo '==============================';
echo 'Spoustim prvotni nastaveni';
echo '==============================';
sh ./config.sh;

edit: ten if je špatně, celý grep musíš dát do hranatozávorkové klauzule a přidat pravou stranu, nebo ještě lépe provést grep na samostatné řádce a v ifu vyhodnotit errorlevel proměnnou ($?).

prosím šlo by to česky? :)

chápu to nějak takto
if [ grep 127.0.0.2 /etc/hosts];

ale nechápu tu pravou stranu apod...

a co se týká environment, tak spustit to nestaci.. nyni jsem to zkusil

a co se týká environment, tak spustit to nestaci.. nyni jsem to zkusil

otázka co v něm je, některé distribuce používají bashovský skript, v jiných jsou jen hodnoty, v takovém případě se musíš kouknout a napsat si skript sám, nebo spustit ten skript/příkaz, který ten environment projede.

ad if:

já bych to udělal úplně jednoduše a čistě:

grep 127.0.0.2 /etc/hosts
if [ $? -eq 0 ]
then
   echo "Nasel"
else
   echo "Nenasel, nebo syntax terror"
fi

Jinak máš tam chybu, před pravou hranzávorkou musí být mezera.

ad 2:

#!/bin/bash
grep 127.0.0.1 /etc/hosts
if [ $? -eq 0 ]
then
   echo "Nasel"
else
      echo "Nenasel, nebo syntax terror"
fi

Mně tohle funguje jak víno (otestováno jak s 127.0.0.1, tak .0.2 - tedy obě varianty našel/nenašel). Co to máš za systém?

edit:

ad 1:

to je nějaký orákl? Pak by mělo pro akceptaci nových nastavení postačovat restart dané služby nebo služeb.

proč tam máš ty středníky?

edit:

jinak tohle ti fungovat nemůže:

#for line in $(cat /etc/environment); do export $line; done
#toto nefunguje :)

dokud tam nenastavíš jiný oddělovač (přesněji řečeno musíš vyhodit mezeru a tabulátor jako oddělovač, jinak bude každé slovo jednou hodnotou v cyklu, ty ovšem potřebuješ jako oddělovač newline, tedy

set IFS=\n

udělá ten trik ;-)

edit2: jinak já spíše preferuju

for line in `cat /etc/environment`; do export $line; done

Souhlasím s pořadím editorů :-) vi je možná mocný nástroj, když se s tím člověk několik hodin učí a pak dalších několik hodin to dostává do paže. s vi se dají na tři zmáčknutí kláves udělat věci, o kterých se jiným editorům ani nezdá. Ale na občasnou editaci je to za trest. Ta filozofie je natolik odlišná, že neznalý člověk to zabalí rovnou a občasný uživatel (toho programu) skřípe zuby, jak se sakra dělá to a tamto.

Len niekolko hodin? Na Vimku je stale co objavovat :-D a denne sa clovek dozvie nieco nove.
Osobne ho pouzivam aj na Macu aj na Windowse samozrejme nie priamo ten konzolovy ale gVim a MacVim. A pride mi to 100x lepsie ako tie parodie aka PSPad a Notepad++.
Ale chapem, ze pre niekoho, kto otvori denne mozno 2 subory a upravi v nich 2 vety postaci notepad.

Nestaci len niekam zapisat to co by malo byt v ENV nastavene. System sa nepozera do ext.suboru v nejakych intervaloch aby odtial vycital to, co si tam zapisal.
Nastavenie vyhladavacich ceist sa robi napr prikazom: "export PATH", kde do PATH das vsetky cesty v ktorych ma system nieco hladat.

Zpět do poradny Odpovědět na původní otázku Nahoru

loading...