Om du vill skicka mig elektronisk post så går det bra.
Och om du vill tillbaks till huvudsidan ska det nog också gå för sig.


2012-08-18 12:27 Unix är alltid lite sämre

Alla som använt en unix ett tag har nog upptäckt att shellscript börjar med "#!/bin/sh" eller liknande. Förhoppningsvis har dom t.o.m. upptäckt script som börjar med "#!/usr/bin/env nånting", och vet varför. Detta är en fantastiskt smidig mekanism, även om env-versionen gärna hade fått vara bara "#!nånting" (vilket i själva verket betyder "kör nånting i lådan användaren står i", vilket är jävligt värdelöst).

Så vad klagar jag på nu då? Jo, tänk om jag vill ge ett argument (utom filnamnet som implicit ges av denna mekanism) till det jag kör? "perl -w" t.ex.? Jo det går naturligtvis bra, jag skriver bara "#!/usr/bin/perl -w" och det funkar finfint. Men justdetja, "#!/usr/bin/env perl -w" menar jag ju, för jag vill inte vara beroende av var perl ligger.

Och nu har unix i sin sedvanliga vishet valt att inte göra det man hade kunnat tro, önska och vänta sig. Den kör nu env med två argument: "perl -w" och filnamnet. Det finns inget kommando "perl -w" i min PATH, och det hela misslyckas.

Fast nu ljuger jag lite. Unix är lite sämre än så faktiskt. Det här att jag ens kunde ge argument när jag vet hela sökvägen är inte heller portabelt. Och om man av någon anledning skulle vilja ha mellanslag i argumenten är, givetvis, detta inte heller portabelt ens mellan dom system som tillåter argument.

Alla varianterna finns:

Så ett argument utan mellanslag är det man faktiskt kan räkna med.

Tur att unix tillhandahåller en massa annat gött man kan komma runt skit med.

#!/bin/sh

exec perl -w <<__EOF__
print "Fantastiskt\n";
__EOF__

Vilken lösning! Om jag nu inte vill att programmet ska kunna läsa från stdin, för då skiter det sig igen. (Lösningen på det får den intresserade läsaren gissa själv.)


Föregående    Nästa