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)
- 1083 megtekintés
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"
- A hozzászóláshoz be kell jelentkezni
:D Koszonom, igy mar a fo programom is lefut, nemcsak a proba szkirptem.
de mivel igy nem mukodik a ". ./proba.sh &" (vagy csak én nem tudom hogyan) futva kell hagynom az ssh-t egesz ejjel :D
- A hozzászóláshoz be kell jelentkezni
`Screen` lesz a te baratod. Rakd fel, aztan `man screen`. Google segitsegevel sok gyorstalpalot talalsz.
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
Nem használom screen-t, ezért:
ez miért jó?
(mármint a screen -D -R)
- A hozzászóláshoz be kell jelentkezni
Látom a googlet se használod.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
... 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.
- A hozzászóláshoz be kell jelentkezni
. ./proba.sh &
Ezzel mit szeretnél elérni?
--
return 0;
- A hozzászóláshoz be kell jelentkezni
elküldeni háttérbe, és az ssh-t nyugodtan bezárni. de nem tetszett neki.
a screen meg nem jutot az eszembe
- A hozzászóláshoz be kell jelentkezni
Ja értem. Nem is tudtam, hogy így is lehet. Én a
nohup parancs &
formát szoktam használni.
--
return 0;
- A hozzászóláshoz be kell jelentkezni
Akkor miért probléma, ha csak a script subshelljében hajtódik végre?
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
van két külön scripted, az elsőben a cd parancs, a másodikban meg valami, ami szeretné az adott könyvtárban találni magát, és egymás után szeretnéd őket futtatni? mert akkor értem, hogy mi a baj. rakd őket össze egy scriptbe, és elszáll a problémád.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
ez nem reális. ott valami gáz van.
van a script elején "#!" ?
- A hozzászóláshoz be kell jelentkezni
ja, és próbáld így:
sh -x ./proba.sh
ez megmutatja, hogy melyik paranccsal van gondja.
- A hozzászóláshoz be kell jelentkezni
Probaltad exportalni az MHELY es FORRAS valtozoidat?
export MHELY FORRAS
- A hozzászóláshoz be kell jelentkezni
man screen
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni