Miksi tämä ei toimi

Anonyymi

Teen skriptin, ihan sama onko se Bash Shell tai python skripti, mutta se asettaa joukon muuttujien arvoja. Olkoon se nyt vaikka tämä

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
a=12
b=3

Kun olen ajanut tuon skriptin, ja yritä laskea noilla asetetuilla muuttujilla, vaikka näin

echo $((a b))

En saa mitään tulosta ruudulle, missä menee väärin?

21

113

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Linnux on niin vaikea. Kannattaa poestaa moinen.

      • Anonyymi

        Windows on niin vaikea. Kannattaa poestaa moinen.


      • Anonyymi
        Anonyymi kirjoitti:

        Windows on niin vaikea. Kannattaa poestaa moinen.

        Ei ole linuks ihmisen käyttis ollenkaan. Eihän nyt tuommoisia skriptejä kenenkään tevejärkisen tarvitse opetella, käyttääkseen vain tietokonetta. Kysykääpä vaikka siltä kuuluisalta pihtiputaan mummolta, osaisiko sekään noita kirjoitella.

        Windows on ainoa ratkaisu aloittajankin ongelmaan!


    • Anonyymi

      Minulla on sellainen tunne, ettei täällä enää ole Linux taitajia. Jos jollakin sattuu olemaan Linux, Windowsin lisänä, siihen ei viitsitä perehtyä taustakuvan vaihtoa enempää, jos nyt sitäkään.

      • Anonyymi

        Kuka viitsii keskellä yötä muuta kuin nukkua?
        Trollipöllö tietysti koska vaikeudet kasaantuvat.


      • Anonyymi

        Jakelussasi varmma myös laskin.. joten tollainen sekoilua ei tarvita.


      • Anonyymi
        Anonyymi kirjoitti:

        Jakelussasi varmma myös laskin.. joten tollainen sekoilua ei tarvita.

        Opetteleisit kirjoittamaan, ennen kuin alat päätäsi aukomaan.

        varmma => varmaan
        tollainen => tuollainen

        Lopea nyt runkkari jo tuo idioottimaisuutesi.


    • Anonyymi

      Minä osaisin ratkaista tuon ongelman, mutta jätän muillekin mahdollisuuden loistaa taidoillaan.

    • Anonyymi

      Ja mitä taas vastaan, vain siinä tapauksessa, ettei tosiaankaan muut osaa, ei saa olla itsekäs ja rynnätä heti kertomaan miten tulisi toimia, menee hyvä pähkinä hukkaan, kerkiää useampi pähkäillä hienoa arvoitusta.

      • Anonyymi

        Windowstrollit saavat näppylöitä komentokehotteestaan.


      • Anonyymi
        Anonyymi kirjoitti:

        Windowstrollit saavat näppylöitä komentokehotteestaan.

        Windowsin komentokehottee on keskimäärin 3X pidempiä!


    • Skripti ei pysty asettamaan isäntä-shellin muuttujien arvoja, se on mahdotonta.

      Python-skriptisi asettaa pythonin sisäiset muuttujat.

      Vastaava Bash-skripti asettaisi kyseisen shellin muuttujat, mutta ei vaikuta isäntä-shellin muuttujiin.

      • Anonyymi

        "Skripti ei pysty asettamaan isäntä-shellin muuttujien arvoja, se on mahdotonta."

        Että mikä se "isäntä-shelli" sitten on, kyllähän skriptit asettaa muuttujien arvoja.

        "Vastaava Bash-skripti asettaisi kyseisen shellin muuttujat, mutta ei vaikuta isäntä-shellin muuttujiin."

        Mites se laitetaan niin että muuttujat säilyttää arvonsa, ja niitä voidaan käyttää skriptin ajettua.


      • Anonyymi kirjoitti:

        "Skripti ei pysty asettamaan isäntä-shellin muuttujien arvoja, se on mahdotonta."

        Että mikä se "isäntä-shelli" sitten on, kyllähän skriptit asettaa muuttujien arvoja.

        "Vastaava Bash-skripti asettaisi kyseisen shellin muuttujat, mutta ei vaikuta isäntä-shellin muuttujiin."

        Mites se laitetaan niin että muuttujat säilyttää arvonsa, ja niitä voidaan käyttää skriptin ajettua.

        Kun bash-skripti ajetaan normaalisti, se ajetaan eri shellissä ja sen tekemät muutokset muuttujiin eivät näy skriptin ulkopuolelle. Bashissa on komento "source" tai "." (pelkkä piste) jolla skriptin voi ajaa samassa shellissä:

        Laita tiedostoon testi.sh seuraavat kaksi riviä:

        a=12
        b=3

        Sitten aja seuraavat komennot:

        . testi.sh
        echo $((a b))

        Tuossa ensimmäisessä komennossa on siis PISTE VÄLILYÖNTI ja sitten tiedoston nimi.


      • Anonyymi
        malaire kirjoitti:

        Kun bash-skripti ajetaan normaalisti, se ajetaan eri shellissä ja sen tekemät muutokset muuttujiin eivät näy skriptin ulkopuolelle. Bashissa on komento "source" tai "." (pelkkä piste) jolla skriptin voi ajaa samassa shellissä:

        Laita tiedostoon testi.sh seuraavat kaksi riviä:

        a=12
        b=3

        Sitten aja seuraavat komennot:

        . testi.sh
        echo $((a b))

        Tuossa ensimmäisessä komennossa on siis PISTE VÄLILYÖNTI ja sitten tiedoston nimi.

        Siinä se oli, olet NERO, kiitosta vaan.


    • Anonyymi

      Jos kerran teet python-skriptin, käytä python komentoja, tä'ssä tapauiksessa
      print(a b)
      (echo on bash-shell komento, se ei kuulu python-skriptiin)
      katso w3schools python-opetus,ateriaali

    • Anonyymi

      Tuossa ensimmäisellä rivillähän se kerrotaan:
      -Käynnistät python3-tulkin kyseisen shellin aliprosessiksi
      -aliprosessilla on oma muistiavaruutensa ja ympäristömuuttujat myös, mutta
      pääprosessilta periytyy ympäristömuuttujat, mutta vain niiden kopiot
      -skriptin loputtua ympäristömuuttujasi siis katoavat

      Päin vastoin se siis toimii:
      voit asettaa main.sh:ssa export a=1; export b=2; ja kutsua ./sub.sh, joka laskee
      tuloksen. Tuo export asettaa siis muuttujan ympäristömuuttujaksi, jolloin se vasta periytyy.
      Joissakin tapauksissa voit käyttää prosessin exit-koodia tuloksen palauttamiseen, vaikka se ei olekaan sen tarkoitus..
      eli "ans = $?" antaa viimeisimmän komennon koodin.

      • Anonyymi

        Yllä on maininta "." komennosta eli source:sta, joka tekee sen päinvastoin, eli ottaa pääprosessiin mukaan eli source:aa skriptin/dataa yms. tässä on se vaara, että sotket pääprosessin muistia, koska mitäänhän ei ole sitten suojattu - voit ylikirjoittaa vapaasti ympäristömuuttujia!


    • Anonyymi

      No siis ne määrittlemäsi muuttujat on voimassa vain skriptissä sen suorituksen ajan. Nuo skriptissä määrittelemäsi muuttujat eivät ole voimassa skriptin ulkopuolella. Joten et tietenkään voi tehdä noin. Nuo tuossa skriptissä määrittelemäsi muuttujat eivät siis ole mitään käyttiksen yleisiä ympäristömuuttujia jne.

      T. miksuh

      • Anonyymi

        Lisään vielä sen, että echo -komentoa ja muuttujien nimiä ei voida käyttää noin kuin ketjunalottavassa viestissä käytetään. Ensinnäkin jos halutaan tulostaa muuttujan aarvo komennolla echo, niin tämä ei toimi:

        echo a



        Tuo tulostaa ainoastaan kirjaimen a.


        Kun halutaan saada selville muuttujan arvo sillon muuttujan eteen on laitettava dollarimerkki, eli näin:

        echo $a


        Linuxin shelli laajentaa merkkijonon $a vastaamaan muuttujan a arvoa. Eli toisinsanoen merkkijono $a korvataan muuttujan a arvolla.


        Komento "echo a" tulostaa siis vain kirjaimen a. Komento "echo $a" tulostaa muuttujan a arvon.

        Mitä sitten tulee siihen, että ketjuna alottavassa viestissä yriteään laskea muuttujien a ja b arvot yhteen ja tulostaa sitten yhteenlaskun tuloksen näin:

        echo a b


        Niin tuo ei tee muutoinkaan sitä mitä ketjun aloittaja olettaa. Tuo komento ei tee mitään laskutoimitusta, se vain tulostaa ruudulle merkkijonon:
        a b


        Jos komentorivillä halutaan laskea yhteen komentorivillä voimassa olevien muuttujien a ja b arvot, niin sen voi tehdä näin:

        1) Määritellään muuttujat a ja b

        a=5
        b= 6

        2) Lasketaan muuttujien summa ja tallennetaan tulos muuttujaan c

        let c=$a $b


        tai tässä let -komennon tapauksessa voidaan tehdä myös näin:

        let c=a b


        Noiden komentojen seurauksena muuttujan c arvoksi tulee muuttujien a ja b summa, eli 11. Muuttujan c arvo voitaisiin nyt tulostaa komennolla:

        echo $c



        T. miksuh


      • Anonyymi
        Anonyymi kirjoitti:

        Lisään vielä sen, että echo -komentoa ja muuttujien nimiä ei voida käyttää noin kuin ketjunalottavassa viestissä käytetään. Ensinnäkin jos halutaan tulostaa muuttujan aarvo komennolla echo, niin tämä ei toimi:

        echo a



        Tuo tulostaa ainoastaan kirjaimen a.


        Kun halutaan saada selville muuttujan arvo sillon muuttujan eteen on laitettava dollarimerkki, eli näin:

        echo $a


        Linuxin shelli laajentaa merkkijonon $a vastaamaan muuttujan a arvoa. Eli toisinsanoen merkkijono $a korvataan muuttujan a arvolla.


        Komento "echo a" tulostaa siis vain kirjaimen a. Komento "echo $a" tulostaa muuttujan a arvon.

        Mitä sitten tulee siihen, että ketjuna alottavassa viestissä yriteään laskea muuttujien a ja b arvot yhteen ja tulostaa sitten yhteenlaskun tuloksen näin:

        echo a b


        Niin tuo ei tee muutoinkaan sitä mitä ketjun aloittaja olettaa. Tuo komento ei tee mitään laskutoimitusta, se vain tulostaa ruudulle merkkijonon:
        a b


        Jos komentorivillä halutaan laskea yhteen komentorivillä voimassa olevien muuttujien a ja b arvot, niin sen voi tehdä näin:

        1) Määritellään muuttujat a ja b

        a=5
        b= 6

        2) Lasketaan muuttujien summa ja tallennetaan tulos muuttujaan c

        let c=$a $b


        tai tässä let -komennon tapauksessa voidaan tehdä myös näin:

        let c=a b


        Noiden komentojen seurauksena muuttujan c arvoksi tulee muuttujien a ja b summa, eli 11. Muuttujan c arvo voitaisiin nyt tulostaa komennolla:

        echo $c



        T. miksuh

        Hups, pakko ottaa hiukan sanojani takaisin. En huomannut, että tuossa aketjun aloittavassa viestissä echo -komennossa oli dollarimerkki ja sulkuja. Sokeana noin voi käydä, koska ruudunlukuohjelma ei puhu kaikkia välimerkkejä normaalisti ellei sitä ole asetettu puhumaan ne. Tavallista tekstiä lukiessa jokaisen sulun ja pilkun sanominen on monesti ärsyttävää, siksi tavallista tekstiä lukiessa yleensä asetan ruudunlukuohjelman vähentämään välimerkkien puhumista.

        Jokatapauksessa tuossa ketjun aloittavassa viestissä oli itseasiassa käytetty echo komentoa ja muuttujia ihan oikein. Myös noin voi tehdä. Eli näin:

        echo $((a b))


        Tuolla tavalla laskutoimitus kyllä suoritetaan ja echo -komento näyttää tuloksen. Monesti tuo on itseasiassa yksinkertaisempi tapa kuin let -komennon käyttäminen.

        T. miksuh


    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. SDP on vastuunkantaja, ja siksi suosituin kansan keskuudessa

      Kiusaamiseenkin SDP puuttuu heti sellaisen tultua ilmi. Esimerkiksi persut lakaisevat nämä maton alle ja pahentavat site
      Maailman menoa
      134
      6270
    2. Punavihreät puolueet haluavat Suomeen satoja tuhansia kehitysmaalaisia

      SDP, vihreät ja vassarit haluavat nostaa esim. pakolaiskiintiötä todella paljon. Orpon hallituksen aikana maahanmuutto
      Maailman menoa
      65
      5182
    3. SDP:n johto pesi kätensä häirintäkohusta

      "Suurimman oppositiopuolue SDP:n johto olisi todennäköisimmin halunnut vaieta puolueen ympärillä velloneen häirintäkohun
      Maailman menoa
      74
      4315
    4. SDP on selvästi paras valinta äänestyskopissa

      Puolueella on arvomaailma kohdallaan, sillä on hyvä CV itsenäisen Suomen historiassa vastuunkantajana ja hyvinvointivalt
      Maailman menoa
      102
      3874
    5. Miksei Korhonen (pers) vastaa Kokon (sd) esittämiin kysymyksiin?

      Hyviin käytöstapoihin kuuluu kysymyksiin vastaaminen, eikä alkaa syyttelemään kysymyksen esittäjää. Mikä vaivaa Korhost
      Maailman menoa
      14
      3665
    6. Häirintäkohun keskellä olevalta kansanedustajalta Jani Kokolta (sd) rajua tekstiä somessa.

      https://www.is.fi/politiikka/art-2000011772322.html Ajaakohan tämä SDP:n kansanedustaja Jani Kokko oikein täysillä valoi
      Maailman menoa
      121
      3240
    7. SDP:n selitykset ontuu pahasti - "On käsitelty heti, mutta kukaan ei tiedä"

      Kokoomuslaiset pistää taas demareita nippuun. Tuppuraisen mukaan mukaan SDP:n useat ahdistelutapaukset on käsitelty het
      Maailman menoa
      52
      2566
    8. Oletko nainen turhautunut, kun en tule juttelemaan siellä?

      Haluaisin tottakai tulla. Älä käsitä väärin. Ehkä ensi kerralla?
      Ikävä
      35
      2549
    9. Nyt tuli Suomen somaleista todella ikävää faktaa

      sillä osa somalivanhemmista lähettää lapsiaan kotimaahansa kurinpitolaitoksiin, joissa heitä pahoinpidellään. Illan MOT
      Maailman menoa
      100
      2326
    10. Kähmijä puolueen kannatus romahtamassa

      Erityisesti naiset ovat suuttuneet SDP:lle kertoo asiantuntijat
      Maailman menoa
      69
      2266
    Aihe