Portál AbcLinuxu, 8. června 2025 11:12
> /dev/null
Co si takhle přečíst něco aspoň o naprostých základech práce s shellem?
#! /bin/sh
echo off
cd /
cd /var/rrd/www
./index.cgi </dev/null
echo on
echo "hotovo"
echo off
' samozřejmě funguje: udělá přesně to, co má, tedy napíše slovo 'off
' a odřádkuje. Bylo by velmi nelogické, pokud by dělal cokoli jiného. Přidejte na konec řádku s voláním index.cgi
přesměrování >/dev/null
a pak si opravdu nastudujte aspoň naprosté základy používání shellu.
echo off
' nepotlačí výstup generovaný jednotlivými spouštěnými programy, pouze vypisování těch příkazů…
./index.cgi?type=8hours&cap=last%208%20hours %lt/dev/null %gt/dev/null
./index.cgi?type8hours: not found
Prikaz./index.cgi "type=8hours&cap=last%208%20hours" %lt/dev/null %gt/dev/null
http://10.152.18.241:8080/index.cgi?type=8hours&cap=last%208%20hours
./index.cgi
spustí program index.cgi
v aktuálním adresáři, tak příkaz ./index.cgi?type=8hours&cap=last%208%20hours
musí zákonitě spustit program s názvem o něco delším, který v tom adresáři ale nejspíše nemáte.
Že se shell zastaví na znaku ampersand (s pro shell speciálním významem) se sice dozvíte až v dokumentaci, ale ke zjištění, že příkaz ./hadice
nespustí program had
, protože tam jsou ještě nějaká písmenka navíc, snad opravdu stačí i ten mozek...
Čo krok, to problém, s ktorým nevieš pohnúť. A koniec cesty nevidno. Buď si veci naštuduj, alebo prenechaj tú úlohu niekomu, kto si to už naštudoval.
Iste. sh zoberie riadok a jeho prvé slovo použije ako meno programu, a všetky ostatné slová sa odovzdajú ako argumenty. "Slovo" je v tom to prípade niečo čo je od ostatných slov oddelené bielym znakom. Biely znak je medzera, tabulátor, alebo znak nového riadku. Viacero slov uzavretých do úvodzoviek alebo jednoduchých apostrofov sa odovzdá ako jeden argument. Rozdiel medzi úvodzovkami a apostrofmi je v tom, že v úvodzovkách sa robí nahradenie premenných shell-u. Ďalšie podrobnosti nájdeš v manuálovej stránke pre sh.
Ako vidíš, na tvoju otázku existuje pomerne presná obsiahla odpoveď, ktorá Ti je k ničomu. Je ti k ničomu preto, že cgi skripty napísané v ľubovoľnom jazyku preberajú argumenty iným spôsobom. Akým konkréne záleží na použitom volaní, ktoré môže byť formou GET (kedy sa argumenty posielajú v premennej prostredia QUERY_STRING) alebo POST (kedy sa argumenty posielajú na štandardný vstup). V oboch prípadoch sa posielajú zakódované (ak sa nemýlim tak podľa rfc1738). Keďže správne a bezpečné parsovanie môže byť dosť zložité, tak to prakticky už nikto nerobí sám, ale použije nástroje na to určené. Napr. perl a CGI.pm, PHP, alebo niečo iné.
Si z toho múdrejší? Preletieť vrtuľníkom odtiaľto ku mne domov je tiež "len kúsok". Napriek tomu to nejdem skúšať s prístupom: "veď treba len naštartovať, vzlietnuť, preletieť rovno 2-3 kilometre a pristáť".
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.