armory.com: ksh/awk scriptek stb (SCO) Unixra

Fórumok

Most talaltam ezt az archivumot, erdekes lehet annak, akiket az alabbi temak erdekelnek:

- ksh
- awk
- mail/news/uucp
- SCO UNIX ;-)

http://www.armory.com/~ftp/

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. ;-)

Hozzászólások

--
A gyors gondolat többet ér, mint a gyors mozdulat.

> 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.)


$ 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.

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!

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.

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.

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."

ö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.

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.

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.

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 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.