Execline
(Új oldal, tartalma: „= Az execline shell = == Fordítás/telepítés == Az ''execline''-t ''Ubuntu 8.10''-en próbáltam ki. Sajnos csomag formájában nem található meg a Debian és Ubunt...”) |
|||
13. sor: | 13. sor: | ||
''skalibs'' könyvtárra, ez szerencsére csomagból telepíthető: |
''skalibs'' könyvtárra, ez szerencsére csomagból telepíthető: |
||
− | {{{ |
||
# apt-get install skalibs-dev |
# apt-get install skalibs-dev |
||
− | }}} |
||
A tarballt kicsomagolva tapasztalhatjuk, hogy az ''execline'' a kissé szokatlan |
A tarballt kicsomagolva tapasztalhatjuk, hogy az ''execline'' a kissé szokatlan |
||
22. sor: | 20. sor: | ||
A szokatlan könyvtárelrendezés miatt a fordításhoz néhány trükk szükséges, |
A szokatlan könyvtárelrendezés miatt a fordításhoz néhány trükk szükséges, |
||
− | először is, az execline-x.yy.tar.gz-t csomagoljuk ki a {{{$prefix/package}}} |
+ | először is, az execline-x.yy.tar.gz-t csomagoljuk ki a <tt>$prefix/package</tt> |
− | könyvtárba (ahol {{{$prefix}}} tetszőleges útvonal, célszerűen a saját /home |
+ | könyvtárba (ahol <tt>$prefix</tt> tetszőleges útvonal, célszerűen a saját /home |
könyvtárunkban). Ezután: |
könyvtárunkban). Ezután: |
||
− | {{{ |
||
$ cd $prefix/package/admin/execline-x.yy/ |
$ cd $prefix/package/admin/execline-x.yy/ |
||
$ echo $prefix > conf-compile/conf-sp_root |
$ echo $prefix > conf-compile/conf-sp_root |
||
− | }}} |
||
Ezzel beállítottuk a fordításhoz szükséges relatív útvonalat, ami egyébként |
Ezzel beállítottuk a fordításhoz szükséges relatív útvonalat, ami egyébként |
||
35. sor: | 31. sor: | ||
a skalibs include-fájlokat: |
a skalibs include-fájlokat: |
||
− | {{{ |
||
$ mkdir -p $prefix/package/prog/skalibs/ |
$ mkdir -p $prefix/package/prog/skalibs/ |
||
$ ln -s /usr/include/skalibs/ $prefix/package/prog/skalibs/include |
$ ln -s /usr/include/skalibs/ $prefix/package/prog/skalibs/include |
||
$ ln -s /usr/lib/skalibs/ $prefix/package/prog/skalibs/library |
$ ln -s /usr/lib/skalibs/ $prefix/package/prog/skalibs/library |
||
$ ln -s /usr/include/skalibs/sysdeps/ $prefix/package/prog/skalibs/sysdeps |
$ ln -s /usr/include/skalibs/sysdeps/ $prefix/package/prog/skalibs/sysdeps |
||
− | }}} |
||
Ezek után a csomag remélhetőleg szerencsésen lefordítható az alábbi parancs |
Ezek után a csomag remélhetőleg szerencsésen lefordítható az alábbi parancs |
||
kiadásával: |
kiadásával: |
||
− | {{{ |
||
$ package/compile |
$ package/compile |
||
− | }}} |
||
− | A keletkező binárisok a {{{command/}}} alkönyvtárban lesznek. |
+ | A keletkező binárisok a <tt>command/</tt> alkönyvtárban lesznek. |
== Működési elv == |
== Működési elv == |
||
60. sor: | 52. sor: | ||
* a UNIX-os programok indítása az execve() rendszerhívással történik, amelyet |
* a UNIX-os programok indítása az execve() rendszerhívással történik, amelyet |
||
− | három argumentummal kell meghívni: |
+ | három argumentummal kell meghívni: |
− | ** a program nevével (redundáns) |
+ | ** a program nevével (redundáns) |
− | ** a parancssori agumentumok listájával: {{{argv}}}, ahol {{{argv[0]}}} |
+ | ** a parancssori agumentumok listájával: <tt>argv</tt>, ahol <tt>argv[0]</tt> |
− | a program neve |
+ | a program neve |
− | ** |
+ | ** mutató a környezetre (<tt>envp</tt>) |
+ | |||
+ | * az <tt>argv</tt> lista lehetővé teszi, hogy a lista elejéről olvasva |
||
+ | végrehajtsunk egy parancsot, majd a lista maradékát tovább <tt>exec</tt>-eljük. |
||
+ | Több program is működik ezen az elven, például: |
||
+ | $ nice -10 echo blah |
||
+ | Így először a <tt>nice</tt> parancs fut le, ez értelmezi az első argumentumot, |
||
+ | ami a -10, majd végrehajtja az <tt>echo</tt> parancsot. |
A lap 2009. január 3., 17:06-kori változata
1 Az execline shell
1.1 Fordítás/telepítés
Az execline-t Ubuntu 8.10-en próbáltam ki. Sajnos csomag formájában nem található meg a Debian és Ubuntu disztribúciókban, ezért forrásból kell telepíteni.
A tarball letölthető a http://www.skarnet.org/software/execline/install.html címről, ugyanitt részletes telepítési utasítás is található, mivel azonban a szokásos make/make install lépéseknél többre van szükség, ezért a fordítás menetét kicsit részletezem. Szükség lesz a skalibs könyvtárra, ez szerencsére csomagból telepíthető:
# apt-get install skalibs-dev
A tarballt kicsomagolva tapasztalhatjuk, hogy az execline a kissé szokatlan slashpackage konvenciót alkalmazza, a programot egyébként a 4 pontos BSD licensszel terjesztik.
A szokatlan könyvtárelrendezés miatt a fordításhoz néhány trükk szükséges, először is, az execline-x.yy.tar.gz-t csomagoljuk ki a $prefix/package könyvtárba (ahol $prefix tetszőleges útvonal, célszerűen a saját /home könyvtárunkban). Ezután:
$ cd $prefix/package/admin/execline-x.yy/ $ echo $prefix > conf-compile/conf-sp_root
Ezzel beállítottuk a fordításhoz szükséges relatív útvonalat, ami egyébként a gyökérkönyvtárra mutatott volna. Ezután azért, hogy a fordító megtalálja a skalibs include-fájlokat:
$ mkdir -p $prefix/package/prog/skalibs/ $ ln -s /usr/include/skalibs/ $prefix/package/prog/skalibs/include $ ln -s /usr/lib/skalibs/ $prefix/package/prog/skalibs/library $ ln -s /usr/include/skalibs/sysdeps/ $prefix/package/prog/skalibs/sysdeps
Ezek után a csomag remélhetőleg szerencsésen lefordítható az alábbi parancs kiadásával:
$ package/compile
A keletkező binárisok a command/ alkönyvtárban lesznek.
1.2 Működési elv
A nyelv alapja az úgynevezett láncolt betöltés (chain loading), amit Bernstein-láncolásnak ([http://www.faqs.org/docs/artu/ch07s02.html Bernstein chaining]) is neveznek, egy alapvető UNIX-os technika, amit sok program használ. Ennek lényege a következő:
- a UNIX-os programok indítása az execve() rendszerhívással történik, amelyet
három argumentummal kell meghívni:
- a program nevével (redundáns)
- a parancssori agumentumok listájával: argv, ahol argv[0]
a program neve
- mutató a környezetre (envp)
- az argv lista lehetővé teszi, hogy a lista elejéről olvasva
végrehajtsunk egy parancsot, majd a lista maradékát tovább exec-eljük. Több program is működik ezen az elven, például:
$ nice -10 echo blah
Így először a nice parancs fut le, ez értelmezi az első argumentumot, ami a -10, majd végrehajtja az echo parancsot.