Most talaltam ezt az archivumot, erdekes lehet annak, akiket az alabbi temak erdekelnek:
- ksh
- awk
- mail/news/uucp
- SCO UNIX ;-)
A legtobb John H. Dubois III nevehez fuzodik. Egyeseknek tobb mint 20 eves (!) changelogja van.
Rogton az elso ujdonsag szamomra: scriptben lehet tobb interpretert (she-bang) is megadni, ha az elso nem elerheto, siman atugrik a kovetkezore...
Szerk. Mint kiderult, a shell csak az elso sort ertekeli, a tobbit ignoralja es az utasitasokat sajat maga futtatja le. ;-)
- 1749 megtekintés
Hozzászólások
☝
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
> scriptben lehet tobb interpretert (she-bang) is megadni, ha az elso nem elerheto, siman atugrik a kovetkezore...
Hm. Es ez AIX-okon mukodik? No hamarosan kiprobalom, jelenleg csak FreeBSD-n tudom, de ha el nem felejtem, jovo heten megnezem HP-UX-on is. (Jo lenne megnezni a ma eppen meg letezo egyeb jujnikszokon, hogy tudjak-e.)
- A hozzászóláshoz be kell jelentkezni
valasz onmagamnak. FreeBSD-n nem mukodik. Ha az elso #! nem letezik, akkor megkapom a jol ismert "not found" hibauzenetet, fuggetlenul attol, hogy mi van mogotte.
- A hozzászóláshoz be kell jelentkezni
Nekem mind FreeBSD-n mind NetBSD-n mukodik.
Ugyanaz mint LGee amit leirt, csak masok az eleresek, elol a nem letezo, utana a letezo shell path.
@@
"You can hide a semi truck in 300 lines of C."
- A hozzászóláshoz be kell jelentkezni
$ cat dual_interpreter.sh
#!/usr/local/bin/ksh
#!/usr/bin/ksh
echo $0
$ ls -l /usr/local/bin/ksh /usr/bin/ksh
ls: 0653-341 The file /usr/local/bin/ksh does not exist.
-r-xr-xr-x 5 bin bin 290014 Jul 11 13:48 /usr/bin/ksh
$ sh ./dual_interpreter.sh
./dual_interpreter.sh
AIX 6.1 default ksh88
- A hozzászóláshoz be kell jelentkezni
$ uname -sr
HP-UX B.11.23
$ cat dual_interpreter.sh
#!/usr/local/bin/ksh
#!/usr/bin/ksh
echo $0
$ ls -l /usr/local/bin/ksh /usr/bin/ksh
/usr/local/bin/ksh not found
-r-xr-xr-x 2 bin bin 448024 Jun 9 2009 /usr/bin/ksh
$ sh ./dual_interpreter.sh
./dual_interpreter.sh
$ set -o emacs
^V
$ Version 11/16/88
Szóval úgy tűnik működik HP-UX-on is. :)
szerk. lásd lentebb
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Döbb... nem azért, mert nem tudtam, hiszen ilyenekből sokkal több van, mint a komplementerből, hanem mert 15 év alatt soha nyomát vagy hírét sem láttam ilyesminek.
Kifejezetten jól jön ilyen fícsör a Linux (/usr)/bin/.. és az AIX /opt/freeware/bin közti dilemmázgatások közepette.
Köszi!
- A hozzászóláshoz be kell jelentkezni
Mindenkinek. ( efbijn,LGee,f0xhu, ... )
Felreertes van. A she-bang-et a kernelnek kell vegrehajtania (ertelmeznie). Kovetkezeskeppen en
$ ./script
Ti pedig
$ sh ./script
formaban probaltatok. Ebben az esetben viszont beleszol a shell, azaz ha en jol gondolom, akkor ez valahogyan a shell nem tul jol dokumentalt eszkoze.
Szerintem, de varok (ellen)velemenyeket.
- A hozzászóláshoz be kell jelentkezni
Sok infót nem találtam a több she-bang-ről, viszont egy érdekes dolgot fedeztem fel:
Ha van she-bang, az kizárólag a legelső sorban szerepelhet (legalábbis ezen a HP-UX masinán így megy). Ha az első sor üres és pl. a másodikba rakok egy érvénytelen shellre mutató she-bang-et, akkor azt már csak sima kommentként értelmezi (nem dob hibaüzenetet). Ez a "./script" és az "sh ./script" módokon hívásra is érvényes. Ergo, mégsem működik, és minden she-bang, ami nem a legelső sorban szerepel, az ignorálva van.
Ezt tudjátok ellenőrizni más rendszeren?
ref 1 - by dmr himself :)
ref 2
Szerk. sok: Szóval, hülye vagyok :) Büki András könyve is így kezdődik, illetve minden shell tutorial elején leírják, hogy az első sorban kell lennie. Innentől kezdve (+ lásd dmr levelét) pedig józan paraszti ész szerint nem illene működnie a több she-bang utasításos formának.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Hmmm. FreeBSD (NetBSD is):
% cat dual_interpreter.sh
#!/usr/bin/mksh
#!/usr/local/bin/mksh
echo $0
% ls -l /usr/bin/mksh /usr/local/bin/mksh
ls: /usr/bin/mksh: No such file or directory
-r-xr-xr-x 1 root wheel 217368 Sep 21 2009 /usr/local/bin/mksh
% ./dual_interpreter.sh
./dual_interpreter.sh
% sh dual_interpreter.sh
dual_interpreter.sh
%
@@
"You can hide a semi truck in 300 lines of C."
- A hozzászóláshoz be kell jelentkezni
Na latjatok, ami szabad szoftver, abban lehetnek ilyen jo dolgok... ;-)
- A hozzászóláshoz be kell jelentkezni
?azaz nem működik?
... kezdek megzavarodni :D
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Beraktam ures sort legelore es mint lathatod mukodik mind a ketfelekepp (./dual_interpreter.sh, sh dual_interpreter.sh) ugy, hogy a harmadik sorban van a hasznalhato shell. :)
szerk:
ugyanez mukodik Debian GNU/Linux alatt is
@@
"You can hide a semi truck in 300 lines of C."
- A hozzászóláshoz be kell jelentkezni
ömm.. de ha az első sorban nem talál érvényes interpretert, akkor fogja magát és szépen shellscriptként értelmezi a fájlt. A 2., 3. és többi sorban nem keres érvényes shellt.
Vegyük ezt:
#!/usr/bin/foo
#!/usr/bin/bar
echo $0
ha ezt lefuttatod ./script-ként, akkor is csak a /usr/bin/foo-ra dob hibát, majd fogja magát és shell scriptként értelmezi a fájl többi részét. Ha sh ./script formában futtatod, akkor simán lefut, mert van interpreter és az nem nézi meg a she-bangeket.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Es valoban. Sejtettem, hogy nincs olyan nagy szerencsem... :)
No meg elegge illogikus is lenne. Koszi a pontositast.
@@
"You can hide a semi truck in 300 lines of C."
- A hozzászóláshoz be kell jelentkezni
Hat ez bukta. Akkor mar csak azt kellene megmagyarazni, minek van ket shebang a scriptekben ;-)
- A hozzászóláshoz be kell jelentkezni
Igazad van, direkt futtatas nem vezet eredmenyre.
- A hozzászóláshoz be kell jelentkezni
titeket nem cseszegetnek arról a címről?
anonym FTP-vel szedtem le a dolgokat és elég érdekes, rengeteg csomagot blokkol a tűzfalam.
- A hozzászóláshoz be kell jelentkezni
En browsert hasznalok, az is anon FTP. Bovebben? Mi van a firewall logjaiban? Egyaltalan milyen termek? Remelem, netfilter, Windows firewall nem er ;-)
szerk. gyorsan rakeresve a domainen mashol valoban akad malware...
- A hozzászóláshoz be kell jelentkezni
Ha mar ez a she-bang dolog ilyen hulyen sult el, ideirom a
#!/usr/bin/env progname
megoldast is, bar ezt valoszinuleg mar ismerik az erdeklodok.
Ezzel az env a PATH-bol hozza az elso megfelelo programot.
- A hozzászóláshoz be kell jelentkezni
ennél is az a kár, hogy nem mindig /usr/bin-ben van... :( ill. az okosok szerint itt is felmerül bizonyos fokú szekjuriti kockázat :( még mindig a legjobb megoldás, kezelhető mennyiségű script esetén IMHO a she-bang-ek átírása a saját rendszereinknek megfelelően.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Vagy a hordozható she-bang, ha éppenséggel elég sok szkriptünk van. Ilyen spéci szkript-fejlécekkel Dunát lehet rekeszteni, némelyik még jó és használható is.
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
> a she-bang-ek átírása a saját rendszereinknek megfelelően.
Persze, oszinten szolva eszembe se jutott mast hasznalni.
Altalaban a scriptjeim elejen kulon deklaralom a PATH-t is.
Jo lenne dolgozni egy olyan dokumentumon is, ahol ezeket osszeszednenk, ne kelljen mar szinte minden alkalommal visszaterni az alapokhoz.
Pl. ezt talaltam korabban, csak par sor, de szerintem jo kiindulopont.
- A hozzászóláshoz be kell jelentkezni
Jo lenne dolgozni egy olyan dokumentumon is, ahol ezeket osszeszednenk, ne kelljen mar szinte minden alkalommal visszaterni az alapokhoz.
pl. HUP Wiki - Ksh?
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni