Solaris, perl, pipe

Sziasztok,

A problémám az lenne, hogy adott egy script, aminek van pár feladata, de, ha úgy hívják meg, hogy

cat file | script.pl > eredmeny

A Scriptből szeretném megtudni, hogy mi az "eredmeny" file _neve_, lehetőleg teljes útvonallal.

Linuxon, procfs -en keresztül megy, tudom, de ez most Solaris 5.9 -en kell :)

köszi

Hozzászólások

rossz a script, nyisd meg az argumentumkent megadott fajlnevet es ugy ird oda

ps.: script.pl < file > eredmeny is eleg lett volna,
cat abuse mar allatkinzasnak szamit :)

--
When in doubt, use brute force.

kiraly :)

A feladat: a script ellnorizze, hogy abba a fileba, ahol van / az argumentum van "szabad -e" kitomoriteni az adott usernek.

Ezert a script.pl -re symlink a gzip / gunzip, eddig semmi gond, ha a user
gzip -d file.gz / gunzip file -t hasznal, megy szepen.

De ugye erre is fel kell keszulni...

egyebkent a pfiles $$ lett a megoldas, kiirja szepen a parent altal nyitott fileokat, koztuk a > utanit is.

Koszonom a jo tanacsot egyebkent, en magam teljesen uj vagyok a unix vilagban, nem tudtam, hogy a cat 'abuse' az ilyen durva.

Alapvetően Replaced-del értek egyet, de ez sajnos mindig egy sokszereplős játék. A feladat kitalálója nyilvánvalóan nem tudja, hogy miről beszél. Az, hogy ez a személy egybeesik-e a feladat végrehajtójával, már igazából csak személyeskedéshez vezetne, úgyhogy inkább koncentráljunk magára a problémára.

1. Ha van rá lehetőség, azt a gondolatot, hogy egy processzből (teljesen mindegy, hogy szkript) ellenőrzöd, hogy a stdout-ját hova irányították, és az "helyes"-e _felejtsd el_. Ez teljesen ellentétes azzal UNIX-os filozófiával, hogy az átirányítás a shell dolga, és a processz erről nem kell, hogy tudjon. Csak egy példa: ha fájlrendszerszintű jogosultságok ebben nem akadályozzák meg a felhasználót, egy közönséges átirányítással fájlokat hozhat létre; ez akkor is így van, ha mellesleg elindítja a processzedet és akkor is ha nem. Továbbá, ha elindítja, és olyanra irányít, ami alkalmazáslogika alapján "helytelen", akkor is létrejön egy üres fájl - ezt akkor le fogod törölni? Mindenképp zűrös lesz ez a hack. Ha egy módod van rá, módosítsd úgy a szkriptet, hogy parancssori paraméterként várja azt a fájlnevet, ahova írnia kell.

2. Ha nincs a fentiekre lehetőség, vagy nem sikerült meggyőznöm Téged arról, hogy ez egy nagy marhaság, akkor itt a megoldás:
http://pastebin.com/m2166fabd
Szerk: és amúgy ez a megoldás pontosan azon okokból vérzik több sebből is, amiért a feladatnak nincs értelme.

Hali,

Nost, kihivas :)

A teljes tortenet az, hogy egy uzemelteto csoporttol kaptunk olyan kerest, hogy a fejlesztoiket kordaba kellene tartani, mert mindig kicsomagolnak egy konyvtarba nagy fileokat, maiket aztan nem torolnek le. A levelezes szerint _honapok ota_ sirnak nekik, hogy NE csinaljak, de megis....

Erre jott az otletuk, hogy ok, akkor a kitomoritesnel ellnorizni kell, hogy vajon szabad -e az adott konyvtarba kitomoriteni. A UNIX filozofia, meg persze, igy van, a shell tudja, hogy az stdout -jat a scriptnek hova iranyitja. Ez egy dolog. Az ugyfel <-> megrendelo viszony pedig egy masik :)

Alapvetoen ugye ez lenne a problema gyokere. Ha a fejleszto csapat elinditja a gunizp / gzip paros valamelyiket, akkor alapbol ellnorzi, hogy nem -e ez a konyvtar a cel, ha ez, akkor hibauzenet es el sem inditja a gzip/gunzip -et.

Az stdin -pedig jol latod, letorlom a file -t es hibauzenetet adok.

A linket nagyon koszonom!

> Erre jott az otletuk, hogy ok, akkor

Ezután jönnek a fejlesztők, akiknek az az ötletük támad, hogy ...

Némi "fegyverkezési verseny" fog így kialakulni, aminek ez a gzip könyvtár ellenőrzés nem a megoldása, hanem csak az "azzal kezdődött hogy visszaütött" típusú kezdete.

Szerintem.

Erre szerintem akkor sem az a megoldás, hogy wrappeled a gzip-et. Ha fejlesztőkről van szó, annyi agyuk csak van, hogy fordítanak egyet a célgépen, és azt használják a Te wrappered helyett.

A disk quota jó ötlet lehet, vagy ha ennél specifikusabb megoldás kell, még mindig nyerőbb egy cronból ütemezett tisztítószkript, mert az legalább biztos, hogy lefut. Ráadásul egy ilyen szkript készíthet statisztikát is, amivel nyugodtan lehet riogatni a kedves fejlesztőt vagy annak menedzserét.