Keresés

Részletes keresés

NevemTeve Creative Commons License 2012.08.23 0 0 328

Válassz:

 

$ ./print_parameters '(1)'

$ (./print_parameters 1)

Előzmény: alt_ (319)
alt_ Creative Commons License 2012.08.17 0 0 319

Sziasztok !

 

Kicsit elfutott az idő +2 év eltelt...

No szóval próbálok visszazökkenni a héjprogramozásba.

Írtam egy egyszerű gyakorló scriptet ami kiírja a kapott paramétereket. Viszont tudom hogy néhány karakternek speciális jelentősége van pl: * vagy {1,2}{3,4} és így meg lehet vizsgálni milyen paramétereket is kap a scriptem a héjtól. A ()-lel vagyok bajban, tudom hogy az is valami speciális dolog, de mi is ? Ugyanis ha ezt használom hibaüzenetet kapok:

 

$ ./print_parameters (1)

-bash: syntax error near unexpected token `1'


locsemege Creative Commons License 2010.05.21 0 0 318
Erre nem gondoltam. Végül is valóban: így a változó tartalma lényegében akár random byte-okból is állhat, tehát tartalmazhat bármit, vagy akármit. :)
Előzmény: NevemTeve (317)
NevemTeve Creative Commons License 2010.05.21 0 0 317
Igazából az a baj, hogy abból, hogy a LC_CTYPE-ban UTF-8 van, egyáltalán nem következik, hogy a változó tartalma valid utf-8 — igazából bármi lehet, tehát flexibilisebbek vagyunk, ha azt mondjuk a 'cut'-nak: 'nesze, itt egy bájtsorozat, vágd le az első bájtot', mintha azt mondanánk: 'nesze, itt egy karaktersorozat, vágd le az első karaktert', ugyanis ezzel alkalmat adunk neki arra, hogy esetleg visszabeszéljen, hogy 'ez nem is érvényes karaktersorozat!'
Előzmény: locsemege (316)
locsemege Creative Commons License 2010.05.21 0 0 316
Ez igaz. Inkább a szemléletmód, vagy ha úgy tetszik, a dolog szépsége és általánossága miatt mondtam. Érvelhetnék azzal, hogy az az 'x' lehetne akár 'ű' is, amelyre mondhatnád, hogy ki az az ostoba, aki oda 'ű'-t ír.
Előzmény: NevemTeve (315)
NevemTeve Creative Commons License 2010.05.21 0 0 315
Szerintem az 'x' utf-8 ban is csak egy bájt... ki kellene próbálni...
Előzmény: locsemege (314)
locsemege Creative Commons License 2010.05.21 0 0 314
Nem inkább így?

echo "x$VAR" | cut -c2-

Legalább is UTF8 esetében szerintem így tűnik jónak.
Előzmény: NevemTeve (312)
locsemege Creative Commons License 2010.05.21 0 0 313
Vagy akár ez, bár nem echo:

a='-n'; cat <<<"$a"

Vagy egy nagyon "beteg" megoldás:

a='-n'; date +"$a"

:))
Előzmény: NevemTeve (312)
NevemTeve Creative Commons License 2010.05.20 0 0 312
"Végtelenül elegáns" megoldás:

echo "x$VAR" | cut -b2-
alt_ Creative Commons License 2010.05.20 0 0 311
locsemege: igen az így működni lázszik :)

NevemTeve: Az echo-nál azt észrevettem hogy az echo --help nem helpet ad hanem kiírja hogy --help, holott a man szerint a parancsról adna infókat úgy mint ahogy az ls --help teszi. A /bin/echo működik úgy ahogy a man írja.
Előzmény: locsemege (310)
locsemege Creative Commons License 2010.05.20 0 0 310
Én lehet, hogy így csinálnám:

a='-n'; echo -ne "$a\n"

Kutyaharapást szőrével... :) Vagy megkerülném:

printf '%s\n' "$a"
Előzmény: alt_ (308)
NevemTeve Creative Commons License 2010.05.20 0 0 309
help echo
Arra ügyelj, hogy a beépített echo természetesen nem egészen kompatibis a /bin/echo-val, dehát ez szinte természetes;)
Előzmény: alt_ (308)
alt_ Creative Commons License 2010.05.20 0 0 308
De rég írtunk ide :)
Ismét elővettem a bash-t, sajnos már sokat felejtettem. El is akadtam rögtön az elején. A feladat csak az hogy van egy változóm amiben tetszőleges ismeretlen tartalom van. Ezt kell kiiratni echo-val. Ha a "-n" stringet rakom a változóba, már rögtön bajban is vagyok mert az echo-nap van egy -n kapcsolója és azt hiszi azt adom meg. Hogy lehet megmondani hogy ez most nem egy kapcsoló ?
alt_ Creative Commons License 2009.01.07 0 0 307
Köszi a részletes leírást !
Előzmény: locsemege (306)
locsemege Creative Commons License 2009.01.06 0 0 306
A ${valtozo%string} a változó tartalmának végéről levágja string-et, ha string illeszkedik a változó végére. A * pedig mindenre illeszkedő globbing. A %% ugyanez, csak a legbővebb részhalmazra, tehát ameddig csak lehet, előremegy az illeszkedésben. A # az elején csinálja ugyanezt, a ## pedig a legnagyobb részhalmazra elöl illeszkedik, azaz a lehető legjobban a vége felé merészkedve próbál illeszkedést találni.
Előzmény: alt_ (304)
locsemege Creative Commons License 2009.01.06 0 0 305
Jól gondolod. :)
Előzmény: alt_ (304)
alt_ Creative Commons License 2009.01.06 0 0 304
Aha tényleg jól működik a 300 !
Valóban csak a tiszta path-t adja vissza a programnév nélkül.

Bár a 2. sor nem teljesen tiszta, de a vég levágását az végzi.
Ennek gondolom egy man bash-sal lehetne utánajárni.
Előzmény: locsemege (302)
alt_ Creative Commons License 2009.01.06 0 0 303
Bocs a 300-t nem próbáltam még (de TV-ben láttam és igen jó film :),
szóval kipróbálom majd.
Előzmény: locsemege (302)
locsemege Creative Commons License 2009.01.06 0 0 302
És a 300-as hozzászólásom? Mert az a megoldás az egykori kérdésedre. Persze, ahogy NevemTeve is mondta, Linuxon nem szokás a futtatható állomány mellé rakni az adatokat, konfigurációt. Bár, ha jól tudom, talán a Gobolinux ilyen.
Előzmény: alt_ (301)
alt_ Creative Commons License 2009.01.06 0 0 301
Én sem vállalom :)
Előzmény: locsemege (299)
locsemege Creative Commons License 2009.01.04 0 0 300
Jut eszembe:

road=`readlink -f "$0"`
road="${road%/*}"

echo "$road"

Előzmény: alt_ (298)
locsemege Creative Commons License 2009.01.04 0 0 299
Igen, de ha jobban végiggondolod, ezeket a fordításokat igen nagy munka megcsinálni, gondolom, Te sem vállalod, különösen úgy, hogy pénzt sem kapsz érte. Szóval marad az angol.
Előzmény: alt_ (297)
alt_ Creative Commons License 2009.01.04 0 0 298
Arról nem is beszélve hogy amikor a sed doksiban felfedeztem a hibát, írtam arra a 2 magyar címre ahol jelezni kell a hibákat. Az egyik cím nemlétező volt, a másik címről válasz nem jött, tehát lehet hogy el sem jutott senkihez.
Előzmény: locsemege (296)
alt_ Creative Commons License 2009.01.04 0 0 297
Igen én is most jöttem rá hogy a magyar nyelvű man oldalak úgy szarok ahogy vannak, teljesen félrevezetik az embert. Mert ugye vagy fordítsunk és mindig frissítsük ha az angol változik, vagy le se fordítsuk. Nem szeretem ezeket a félmegoldásokat.

Szóval leszedtem a csomagkezelővel a manpages-hu csomagot, és láss csodát, tök jó lett a sed-nek is a doksija, és a readlink-nek is. Azt hiszem a readlink doksija 1998-as volt !
Előzmény: locsemege (296)
locsemege Creative Commons License 2009.01.04 0 0 296
Az angol manpage-eket olvasd. Gondolom, nagyvonalúan fordították. Vagy régen, és nem követi a fordítás a változásokat.
Előzmény: alt_ (295)
alt_ Creative Commons License 2009.01.04 0 0 295
Ez tényleg úgy néz ki működik !

Viszont a readlink dokumentációjával van megint bajom. (A múltkor a sed doksijával is bajom volt, olyan opciót írt le amit a sed nem is ismer !).
Szóval a man readlink még véletlenül sem említi meg hogy létezik -f opció. De ha a neten keresek rá a readlink-re az már megemlíti a -f opciót. Nekem kicsit zavaros.
Íme idemásolom nektek a man readlink kimenetét:

READLINK(1)

NÉV
readlink - szimbolikus link tartalmának kiírása

ÁTTEKINTÉS
readlink fájl

LEÍRÁS
Ha a fájl egy szimbolikus link, kiírja a tartalmát (azt, hogy mire mutat), és sikeres visszatérési értékkel kilép;
minden más esetben sikertelen visszatérési értékkel lép ki.

Az olyan rendszereken, amik nem támogatják a szimbolikus linkek használatát, a readlink mindig sikertelen vis-
szatérési értékkel lép ki.

OPCIÓK
A readlink a következő opciókat fogadja el:

--help Kiírja a használatára vonatkozó információkat és kilép.

--version
Kiírja a verzióinformációkat és kilép.

LÁSD MÉG
readlink(2)

MAGYAR FORDÍTÁS
Tevesz Tamás <ice@rulez.org>
Előzmény: locsemege (291)
alt_ Creative Commons License 2009.01.04 0 0 294
Én is átgondoltam a dolgot. Inkább az lesz hogy a script paraméterként meg fogja kapni az olvasandó fájlt. Így nincs a scriptbe bedrótozva a neve, és többféle fájl-lal is együtt tud működni.
Előzmény: NevemTeve (293)
NevemTeve Creative Commons License 2009.01.04 0 0 293
Nézd meg pl. a /usr/bin-t: egy fél adatfájl nem sok, annyi sincs ott.
Előzmény: NevemTeve (292)
NevemTeve Creative Commons License 2009.01.04 0 0 292
Szerintem ez így nem UNIX-os, az adatfájlt valami olyasmi helyre kellene tenni, hogy /usr/local/share/PROJEKTEM/adatok.txt
Előzmény: alt_ (290)
locsemege Creative Commons License 2009.01.04 0 0 291
readlink -f "$0"

Bár ezt most nem gondoltam végig, hogy minden esetre jó-e, de talán igen, hiszen az aktuális $PWD-ből és $0-ból megvan, mégha symlink-en keresztül lett hívva is.
Előzmény: alt_ (290)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!