Tsau
Oon tehny shell-skriptin, jossa otetaan telnet yhteen purnukkaan ja ajetaan komento.
Telnet siksi, ettei purkki tue ssh:ta eikä edes rsh:ta.
Homma toimii loistavasti linuxissa itsessään kun sitä testasin, mutta ko. purnukka huomaa jostain, ettei terminaali olekaan vt100 (joka on vähimmäisvaatimus) ja heittää virheilmoituksen jälkeen siksi ulos.
Mistä se voi tietää ettei kyseessä ole oikea terminaali? Nyt oon kyllä huuli pyöreenä täällä.
Oon tehny shell-skriptin, jossa otetaan telnet yhteen purnukkaan ja ajetaan komento.
Telnet siksi, ettei purkki tue ssh:ta eikä edes rsh:ta.
Homma toimii loistavasti linuxissa itsessään kun sitä testasin, mutta ko. purnukka huomaa jostain, ettei terminaali olekaan vt100 (joka on vähimmäisvaatimus) ja heittää virheilmoituksen jälkeen siksi ulos.
Mistä se voi tietää ettei kyseessä ole oikea terminaali? Nyt oon kyllä huuli pyöreenä täällä.
Vastaukset 21
Vanhimmat
En ole guru mutta tuli vain mieleen että ainakin KDE:n konsolissa voi sanoa että näppis on vt100(historic).
Olisko sillä vaikutusta?
tee kotihakemistoosi .telnetrc jotenkin tmän näköinen
DEFAULT
environ undefine USER
# First system entry
purkki
environ define TERM 'VT100'
En tiedä tarvitaanko tuota default osuutta lainkaan. Itse kokeilin pistää tuon vt100 rivin default-kohtaan ja toimi. Update: kokeilin ilman defaultia ja toimi. Tuo purkin osoite tarvitsee olla hosts-tiedostossa tai voit käyttää myös suoraan ip-osoitetta.
P.S. Tosimies kun ei backspacea käytä! Ni!
Tätäpä testaan heti kun mahdollista ja kerron sitten miten kävi. Vaikuttaa lupaavalta, tänks!
Ilmeisesti serveripään softa lähtettää jotain kontrollisignaaleja millä tarkistaa terminaalin tyypin. Tuntuu olevan mission impossible.
Kokeilin expectillä ja yhtä huonolla menestyksellä.
sulla oikeen aiheuttaa harmaita hiuksia?
Joka ensimmäiseksi lähettää terminaalille kyselyn, jotta kukas olet. Jos vastausta ei heru, tulee disconnect.
No nyt mä sain sen toimimaan Expectissä, mutta vain silloin, jos ajan sitä oikeassa terminaalissa. No eteenpäin se on sekin.
Nyt pitäs vaan keksiä, miten saan pseudoiltua homman niin, että voin ajaa cronissa sen työn.
...että tosiaan saan outputin jos mulla on oikea terminaali käytössä.
Mut se serverin pää haluaa tarkistaa että mulla on vt100 käytössä. No sehän onnistuu, jos ajan skriptin käsin.
Mut ku ajan esim uudelleenohjaan ulostulon tyyliin ./skripti.sh > skripti.txt, ei homma enää toimikaan, sillä silloinhan ei ole enää terminaalia käytössä.
Onkohan olemassa mitään fake-terminaalia, johon voisin uudelleenohjata outputin ja joka osaisi vastata kysyttäessä, että "olen vt100"?
Nyt ovat kaikki neuvot kullan arvoisia!
Onnistuiskohan, että laitat jotenkin näin:
term -c "./skripti.sh > skripti.txt"
Eli käynnistät terminaalin komento optiolla. Etsi man-sivuilta ko. terminaalin optiot.
Tilanne siis on, että tarkoitus on ajaa cronityönä tuo ohjelma, mikä pyörii terminaalissa ihan hyvin. Käytännössä ei siis oikeaa terminaalia ole käytössä lainkaan.
Siis eikö onnistu, jos cron käynnistää terminaalin, joka taasen käynnistää sen skriptin komento/suorita optiolla?
Mihin se cron sen terminaalin käynnistää, kun mitään näyttöä/terminaalia ei ole käytettävissä? Se kuolee se terminaalin käynnistys heti kättelyssä.
... niinpä siinä tietysti käy. Voihan siihen skriptiin tehdä ikuisen while-luupin ja sleep 3600 (tunti) ja ajaa sitä vaikka tekstitilan terminaalissa. (idioottimainen ratkaisu?)
Kas kun se telnet-serverin softa kysäsee yhteyttä ottaneelta clientilta, että mikä sä oot. Ja vaatii vastauksen tietyssä ajassa.
Eikä oo mitään tekstitilan terminaalia olemassa, kun ei oo näyttöä. On vaan se cronityö, mikä sen skriptin ajaa.
"kun ei oo näyttöä."
näyttöä? telkkaria? monitoria? littua? eihänsitä tarvita cronin ajoon?vai tarvitaanko? min en nyt ymmärtäny sitä että mihin sitä näyttöä tarvitaan? jos siitä oli kyse. (sry öbaut mai hjumalatila :D) ehkäpä se on syynämiks en tajua .D
Sovellus vaatii terminaalin. Joko se on ihan oikea näyttö tai sitten telnet-ikkuna.
Sovellus kysyy, kuka sinä oot, ja sitten terminaali vastaa, että oon "vt100".
Jos sen ajaa cronissa, kuka vastaa kun kysytään, että mikä sä oot? Ei ole terminaalia, joka vastaisi, eihän?
Toivotaan ettei aamulla oo paha rapula, varsinkin jos oot työssä käyvä.
No entäpä autaisiko expectin lokaalimuuttuja $expect_out , jossa pitäisi olla serverin sen hetkinen vastaus, jonka voit (ehkä) ohjata tiedostoon.
Oon raivopäisenä yrittänyt etsiä esimerkkikoodia newsesistä, googlesta ja vaikka mistä.
En mä osaa tehdä siihen sopivaa koodia :(. Tuohon expect_outtiin mäkin kyllä aina törmään.
... dataa sä yrität sieltä purkista tallentaa? (serverin vastaukset vai? )
olen kyllä ihan työssä käyvä. työ vaan alkaa vasta 12 ni ei pienet aamutirsat haittaa :D
tajusin nyt tuon ongelmasi.. en kyllä äkkiä ossoo vastatakaan :I(
Entäs jos ajaa skriptin asettamalla prosessikohtainen ympäristömuuttuja, eli crontabin rivin komento-osaan "TERM=vt100 ./ohjelma" pelkän "./ohjelma" sijaan ? Tämä näin pikaisella lukemisella ongelman kuvauksesta. Crontabiin voi laittaa myös ympäristömuuttujan asetuksen omalla rivillään (man 5 crontab), jolloin se vaikuttaa käsittääkseni kaikkiin crontabissa oleviin ohjelmiin.
Skriptin alkuunkin voisi kokeilla laittaa suoraan "export TERM=vt100".
Ei noin. Siis homma menee seuraavasti:
- telnet purnukkaan
- purnukan telnetd kysyy, mikä olet lähettämällä sekvenssin
- tässä vaiheessa pitäisi ohjelman osata lähettää takaisin sekvenssi, joka on vt100
TERM-ympäristömuuttuja vain kertoo serverillä pyörivälle softalle, että olen esim vt100. Mut jos softa haluaa kysyä terminaalilta kuka olet, pitää terminaalin myös osata tähän vastata.
Tää on kuulkaa vaikee juttu.