Bash script

Kezdőlap Fórumok Programozás Bash script

10 bejegyzés megtekintése - 81-90 / 438
  • Szerző
    Bejegyzés
  • #2053259
    retaliator44
    Felhasználó

      Azt akarod mondani, hogy ezt:

      Code:
      $(echo „tail -5 /etc/inittab | head”)

      illetve minden idézőjeles kifejezést a shell igy:

      Code:
      $(echo „tail” „-n5” „/etc/inittab” „|” „head”)

      értelmez?
      Illetve mi a helyzet a ‘ és `jelekkel?

      #2053260
      pointux
      Felhasználó

        próbáld ki:
        touch „;”
        ls ; ls (ls enter ls)
        ls „;” ls (ls „;” enter ls)

        Illetve mi a helyzet a ‘ és `jelekkel?
        echo „AA=ls”
        echo „AA=`ls`”
        amixer get Master | grep ‘Limits’ | sed ‘s/(.*)Playback 0 – //’ | sed ‘s/ (.*)//’
        echo „‘”‘valami'”‘”
        echo „”valami””

        #2053261
        uzsolt
        Felhasználó

          Idézet a bash man-jából:

            Command Substitution
                Command substitution allows the output of a command to replace the command name.  There are two forms:

                        $(command)
                or
                        `command`

          Tehát a két zárójel (ill. `-ek) közötti valaminek a standard kimenetét fogja jelenteni. Ebben az esetben a kimenet (mivel egy echo-t hívsz): 

          Code:
          tail -5 /etc/inittab | head

          Tehát elvileg azt csinálná, mintha kiadnád a fenti parancsot.
          Viszont gyakorlatilag a bash nem fogja a | karaktert értelmezni (márminthogy csövezés kellene, hogy következzen), és marad a tail argumentumlistájában, amiről ő azt hiszi, hogy egy fájl, valamint a head-ről is.

          #2053262
          retaliator44
          Felhasználó

            Ha jól emlékszem, akkor a ` ` jelek között meg általában idézőjelek („,’) között a bash nem piszkál bele semmibe, még a |-t sem bántja. Ezek alapján mivel a | jelet a bash-nak kellene értelmezni, és nem a tail-nek, mert nem tartozik a tail paramétereibe, viszont nem értelmezi az idézőjelek miatt, ezért inkább odadobja a tailnek paraméterként?
            Akkor ezek szerint ezért van az is, hogy

            Code:
            $(echo „tail -5 /etc/inittab” | head)

            igy viszont működik?

            #2053263
            uzsolt
            Felhasználó

              Alakul a molekula 🙂

              Az, hogy a ` közötti dumát nem piszkálja a bash, nem igaz. Ott parancsbehelyettesítést végez. Próbáld ki:

              Code:
              TESZT=`ls | head -n 1`
              echo $TESZT

              valamint

              Code:
              ls | head -n 1

              Gondolom, nálad is megegyezik a két parancs-sorozat kimenete.
              A te esetedben az volt a „gáz”, hogy a parancsbehelyettesítés közvetlenül egy parancsot jelentett, nem pedig egy változó-szerűséget.

              Kettős idézőjel: tessék kitalálni, mikor nyomtatja ki a bash a $TESZT szöveget!

              Code:
              echo $TESZT
              echo „$TESZT”
              echo ‘$TESZT’

              Ezeket persze lehetőleg még akkor, amikor a $TESZT létezik (persze más környezeti változóval is műxik).

              #2053264
              pointux
              Felhasználó

                „touch „;”
                ls ; ls (ls enter ls)
                ls „;” ls (ls „;” enter ls)”
                Ha ezt kipróbáltad, akkor megláttad, hogy mi a különbség a „;” bash szimbólum és a „;” string között…, na a „|” szimbólummal ugyanaz a helyzet.

                „Ezek alapján mivel a | jelet a bash-nak kellene értelmezni, és nem a tail-nek, mert nem tartozik a tail paramétereibe, viszont nem értelmezi az idézőjelek miatt, ezért inkább odadobja a tailnek paraméterként?”
                Dehogynem értelmezi stringként értelmezi, ahogy „akartad”…
                Ő tudja, hogy neki mit kell csinálni, csak te nem tudod. Gondolj bele, hogy mi van, ha egy „|” tartalmú file-t akarsz létrehozni?
                touch „|”
                ls „|”
                Nem értelmezheti mindig bash szimbólumként.

                $(echo „tail -5 /etc/inittab” | head)
                Na, most akkor minek a „”, egyátalán?

                #2053265
                pointux
                Felhasználó

                  Sőt, ide minek az echo? Bár ezt már kérdeztem.

                  #2053266
                  uzsolt
                  Felhasználó
                    vizsla wrote:
                    $(echo „tail -5 /etc/inittab” | head)
                    Na, most akkor minek a „”, egyátalán?

                    Jobb olvashatóság? Csak igazából az nem világos, hogy ez az egész mire jó? Mármint hogy egy echo kimenetéből miért jó parancsot csinálni. Az OK, hogy ha mondjuk egy fájlban van sok sorod, és annak mondjuk a 192. sorát akarod végrehajtani, esetleg. De így?

                    #2053267
                    retaliator44
                    Felhasználó

                      „Kettős idézőjel: tessék kitalálni, mikor nyomtatja ki a bash a $TESZT szöveget!”
                      Az utolsónál mert a ‘-ba tényleg nem piszkál bele. A ” esetén úgy tudom további értelmezést is végrehajt.

                      ls „;” ls (ls „;” enter ls)

                      Itt az a gond, hogy a 2. ls-t is fileként keresi, nem parancsként. De végül logikus.

                      Viszont ha az idézőjelben levő dolgokat stringnek veszi, akkor mi a helyzet a fent emlitett echo „$TESZT”-tel? Ott a $-t miért nem stringnek veszi? Pontosabban akkor mikor milyen idézőjelben mit vesz stringnek és mit nem? (link is elég ha nem akartok gépelni, gondolom nem egyedül nekem jutott eszembe)

                      „ez az egész mire jó?”
                      Ez egy nyomorult feladat, amit az egyetemen kaptunk, hogy mondjuk meg, miért azt adja amit. És több társammal egyetemben halvány gőzünk nem volt róla…

                      #2053268
                      pointux
                      Felhasználó

                        „”$TESZT”-tel? Ott a $-t miért nem stringnek veszi?”
                        „” között mindenből sztring lesz kivéve: ‘$’, ‘`’, és ”/(‘…’), ill a ‘*’ és ‘@’-nek speciális jelentése van.

                        „link is elég ha nem akartok gépelni, gondolom nem egyedül nekem jutott eszembe”
                        http://www.gnu.org/software/bash/manual/bashref.html

                      10 bejegyzés megtekintése - 81-90 / 438
                      • Be kell jelentkezni a hozzászóláshoz.