Bash: Variable innerhalb einer Funktion ausgeben, ohne die Funktion auszuführen.


  • Das stellt ein Teil eines PKGBUILD dar, das ein Split-Package generiert.


    In einem Buildsystem benötige ich jetzt diese pkgver Variable.
    Mal angenommen ich source dieses Script in einem anderen Bash Script. Was müsste ich tun, um an die Variablen z.B. mit einem echo auszugeben, ohne die Funktion auszuführen.


    Oder nochmal anders: Ich möchte die Variablen innerhalb der Funktion herauslesen, aber make und install nicht ausführen.



    Vielen Dank


    Christopher

  • z.B.


    [size=10]

    Code
    VERSION=`grep pkgver= <  <path/to/scirpt> | awk -F'=' '{print $2}'
    
    
    echo $VERSION // zum Testen nur die Ausgabe


    Wenn du dadrauf als variable zugreifen willst, musst du es schon global definieren. Dann würde es gehen.


    Warum definierst du Versionsnummer in einer Funktion eigentlich?


    Gruß,
    Lado

  • Danke schonmal, aber das löst das Problem nicht. Liegt aber an mir. Ich stelle das nochmal anders dar.



    Außerdem können diese package Funktionen mehrfach vorkommen und unterschiedliche Werte in der pkgver haben.

  • ok, aber warum erstellst du eine spezielle z.B. define.sh Datei, wo solche Sachen deklariert sind?


    Z.B.



    in define.sh

    Code
    _actual_ver=12.10.1_extra_ver=daily13.05.02pkgver=${_actual_ver}${_extra_ver}


    Dann inkludierst du es in


    Bash
    #!/bin/bash
    . define.sh
    package_testpkg() {
      make DESTDIR="$pkgdir" installinstall -Dm644 
    .......
    
    
    }


    und sonst wo noch genauso?

  • Das liegt nicht in meiner Hand.


    https://github.com/chenxiaolon…120/unity-scopes/PKGBUILD


    Es stellt in sich schon eine Art Definition dar. Es ist die Definitionsdatei für makepkg. Dem "Paketbauer" unter Archlinux.


    In diesen PKGBUILDs gibt es keine großartigen Regeln. Alles was Bash erlaubt ist auch in den PKGBUILDs erlaubt. Wobei das verlinkte PKGBUILD schon eine sehr hässliche und asoziale Variante ist.

  • Moin!


    Du kannst nicht eine Funktion nur zum Teil ausführen, woher soll die bash wissen, was sie ausführen soll und was nicht? Auch eine Zuweisung ist etwas, das "ausgeführt" wird.
    Wenn es ein "asoziales" PKGBUILD ist, schicke doch einen Patch, vielleicht übernimmt er's ja.


    Lars.

  • Ganz boese: die Zuweisung aus dem eigenen Code rausgreppen und dann sourcen.


    Aber das ist so aehnlich wie Variablennamen in Variable fuellen.


    Dafuer wird man (zurecht) geteert und gefedert.


    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • Weisst du schon jetzt aus welcher Methode du die Variablen brauchst. Laut der Dokumentation, wird die Datei automatische generiert. Vlt solltest du die Daten auch von dort aus beziehen, wo diese definiert werden?

  • Die Methode weiß ich vorher. Die werden in einem pkgname-Array oben definiert.


    Das Generieren ist nur zur Hilfe für ihn. Das PKGBUILD ist letztlich das Skript, welches ausschlaggebend ist.
    Das pkgver innerhalb der Funktion ist kann genauso gut auch bei PKGBUILDs auftreten, die nicht automatisch generiert werden.

  • hi


    meines wissen kann man mit local locale varibablen definieren innerhalb einer funktion ... ich glaube die koennen dann sogar
    die gleichen namen haben.


    http://tldp.org/LDP/abs/html/localvar.html


    holger

    VDR1 : core2duo 3.2 Ghz , 1GB Ram , 2x TT 1501 DVB-C 1 GB HD , Asus EN 210 Silent , Debian Squeeze 64bit + e-tobi Pakete
    VDR2 : 1.2 Ghz P3 , Digitainer 768 MB Ram , yavdr 0.3a 32 bit

  • Oder ganz garstig mit einem völlig anderen Ansatz:




    Wichtig: die alias-Definitionen müssen vor der Funktionsdefinition stehen, hier also vor source.
    Du müsstest einfach alle unerwünschten Befehle in der Funktion 'erden' per alias. Sofern Du die Befehle dann später in Deinem Script brauchst, kannst Du ja die alias-Definition wieder aufheben. Die Funktion sollte dann weiterhin mit den geerdeten aliasen arbeiten (habe ich nicht getestet).


    Löst das Dein Problem?
    Christian

  • Nicht so richtig... Ich kann ja im voraus nicht wissen welche Befehle innerhalb der package Funktion stehen.


    Ich habe aber jetzt eine Lösung gefunden. Ich bin grad am Handy, daher poste ich es später wenn ich am PC bin.


    Gesendet von meinem Galaxy Nexus mit Tapatalk 2

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!