egyszeru problema

Udv.

van egy szriptem ami nem hajlando lefutni. elkezdtem keresgelni az okat, es arra jutottam, hogy nem
hajtodik vegre nehany parancs, ilyenek pl. a konyvtarvaltas, es a valtozo beallitas sem.
ezek parancssorban mukodnek, de a szkriptben mar sajnos nem. ez mitol lehet?


test:~ # cat proba.sh
#!/bin/sh
cd /root/X
test:~ # ./proba.sh
test:~ # cd /root/X
test:~/X #

az X egy szimbolikus link, de ugyanezt csinalja letezo konyvtarakkal is. rootkent csinalom, ugyehogy meg jogom is van hozza.

szerk: ezek alatt probaltam
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu)
GNU bash, version 2.05b.0(1)-release (i586-suse-linux)
GNU bash, version 3.1.17(1)-release (i586-suse-linux)

Hozzászólások

A valasz egyszeru. A "cd" shell belso parancs abban, igy abban a shellben hajtodik vegre, ami a scriptedet futtatja. (#!/bin/sh) Ha a scriptbe a cd parancs utan beirsz egy pwd parancsot, akkor latod, hogy a script atvalt a konytarra.
Ha az indito shellben szeretned latni az eredmenyt, akkor source-old a scriptet. Azaz igy futtasd ". ./proba.sh"

Ez a screen egy érdekes program... vagy 10 éve olvastam róla először, de akkor annyi mindenről olvastam, hogy nem akartam még 1 tucat billentyűkombinációt bebiflázni. Aztán vagy fél éve megint olvastam róla (10 év alatt picit megszaporodott az egyszerre kezelendő terminálok száma), és azóta annyiban változott a napi rutin, hogy az ssh után az első kiadott parancs nem az mc -b, hanem a screen -D -R. Nagyon rá lehet kapni...

n-edik napon kiadom a screen -D -R-t és látom, h az n-1-edik napon (screen alatt) indított hosszú program hol is tart, aztán ha meguntam nézegetni, lezárom a terminált/kikapcsolom a gépet, és a legközelebbi screen -D -R után tovább nézegetem.

Magyarul: a screennel úgy teszed "függetlenné" a programot a termináltól, vagyis védetté a kapcsolat szakadásától, hogy nem kell hozzá a háttérbe tenned/nohupolnod.

... az előzőeken túl:

nemcsak hogy nem kell nohupolnod, hanem annál több: a nohup szimplán berakja a háttérbe a programot, és amikor becsukod a terminált, a program azt elveszti, a továbbiakban nem terminálban fut, a kimenete pedig egy fájlban landol, és többet nem is tudsz a programmal kommunikálni (max. signalokkal).

a screen ehhez képest továbbra is terminálban hagyja futni a programot, miközben te arról a terminálról le tudsz csatlakozni, elmész haza, vagy akár a világ végére, majd a világ másik végéről bejelentkezve ugyanarra a terminálra (amiben közben a program futott tovább, a kimenete szépen mehetett az közben csak virtuálisan létező terminálra) vissza tudsz csatlakozni, és tovább tudod ugyanazt a programot interaktívan buzerálni, láthatod, hogy közben mit írt ki, stb.

az a bajom, hogy amikor ha ezt a ". ./"-rel indtom, ahogy a fenntebbi kolega javasolta, a script lefut, ha viszont csak siman "./" , akkor utvonalhibakkal elszall

egy egyszeru tar parancsot pl
MHELY=/home/user/mentes
FORRAS=/ez en novelles fileserver-em amire bejelentkeztem
cd $FORRAS
tar -cvvf $MHELY/mentes.tar MENTES --exclude-from=<(cat /root/kihagy.txt)

nem fut le script-ben, utvonal hibaval elszall. viszot ha egymas utan beirogatom parancssorban, akkor siman lefut.

egy szkriptben van minden, csak megprobaltam a leheto legegyszerubbre hozni a pelda szkriptet.

ma, hogy ide jutottam a gep ele, itt is csak akkor fut le a program helyesen, ha ". ./"-rel inditom.

a het eleje ota kuzdok ezzel, egy debiant csereltem suse-re, a novell kliens miatt, a debian-ban nem volt ilyen problemam.

banhazi: a valtozok exportalva voltak, es jol.
vl : volt #!, es koszi a sh -x parancsot, hasznos nagyon

kozben rajottem meg egy hibara, hogy a "<(cat /root/kihagy.txt)" reszt nem mindegyik tar verzio kezeli vagy kezeli jol. ez is elakasztotta, de csak siman --exclude-from=/root/kihagy.txt-vel most az is megy