problema con bash e flusso dello script

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
conraid
Staff
Staff
Messaggi: 13296
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

problema con bash e flusso dello script

Messaggioda conraid » gio mag 23, 2019 11:09

PErdonate il titolo ma non sapevo che mettere, e anche a cercare online non so cosa cercare.
Scrivo il problema qui, cercando di spiegarlo che mica è semplice, o forse sì, e magari anche se non sapete rispondere se potete darmi delle dritte su cosa cercare.
Vi spiego.
Ho uno script in bash per compilare in sequenza i miei script.
Prende il file .info, installa le dipendenze e compila il pacchetto.
Anche se scritto male (e per questo non l'ho messo su github) funziona a dovere, ma ha un problema.
Vi faccio un esempio:
ho Pippo che richiede la libreria Palla da compilare.
Quindi lancio lo script che compila (che si chiama blankpkg) di Pippo e prima cerca nella directory di sviluppo e poi in quella del repository la libreria Palla, la installa e poi lancia la compilazione.
Quindi

Codice: Seleziona tutto

# blankpkg

nella directory Pippo funziona. Se Palla è nella directory di sviluppo prende quella, altrimenti la prende dal repository.
Se però lancio il tutto tramite script automatico, cioè un banale script che fa

Codice: Seleziona tutto

for i in *; do cd $i; blankpkg ; cd -; done

funziona anch'esso, compilando prima Palla e poi Pippo, ma, e qui arriva il problema, prende Palla dal repository e non quella appena compilata.
Come posso forzare la cosa? è come se prendesse quel che c'è al momento del lancio dello script con for e non quello al momento in cui lancia blankpkg.

Spero di essermi spiegato.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6525
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: problema con bash e flusso dello script

Messaggioda targzeta » gio mag 23, 2019 20:25

Ma la directory di sviluppo qual'è? Quella in cui lanci il ciclo for?

Lo script blankpkg come cerca la directory di sviluppo? Con un path assoluto o relativo?

Che test fa per capire se la directory Palla esiste nella directory sviluppo?

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
conraid
Staff
Staff
Messaggi: 13296
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: problema con bash e flusso dello script

Messaggioda conraid » ven mag 24, 2019 8:00

targzeta ha scritto:Ma la directory di sviluppo qual'è? Quella in cui lanci il ciclo for?


Sì, lo lancio dalla directory di sviluppo

targzeta ha scritto:Lo script blankpkg come cerca la directory di sviluppo? Con un path assoluto o relativo?


In realtà ricordavo male, blankpkg chiama a suo volta uno script che si chiama installdep con il nome del pacchetto.
blankpkg fa controlli

Quindi in blankpkg ho

Codice: Seleziona tutto

     
      slackpkg -batch=on -default_answer=y clean-system
      installdep $NAME


sono in chroot, quindi prima di ogni compilazione pulisco la slackware dai pacchetti non originali e poi installo quelli che servono.

installdep è questo

Codice: Seleziona tutto

#!/bin/sh
set -eu

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

CWD=$(pwd)
ROOTDIR=/opt/slackers/
REPODIR=$ROOTDIR/repository
DEVELDIR=$ROOTDIR/devel
BUILDIR=$DEVELDIR/SlackBuilds
WORKDIR=$DEVELDIR/working
READYDIR=$DEVELDIR/ready
DEPS=()

if [ -z ${1:=''} ]; then
  echo "Manca il nome del pacchetto"
  exit 1
fi

NAMEPKG=$(echo $1 | sed 's|/$||' | sed 's|\.$||' )

if ! [ -d $REPODIR/$NAMEPKG -o -d $READYDIR/$NAMEPKG -o -d $WORKDIR/$NAMEPKG ]; then
  echo "$NAMEPKG non è il nome di un pacchetto presente nel repository"
  exit 1
fi

INST=${2:-n}

_instpkg() {
  if [ "x$INST" = "xn" ]; then
    if [ "x$1" != "x$NAMEPKG" ]; then
      _installpkg $1
    fi
  else
    _installpkg $1
  fi
}

_installpkg() {

  if [ -e $WORKDIR/$1/${1}*cf.txz ]; then
    upgradepkg --install-new $WORKDIR/$1/${1}*cf.txz
  elif [ -e $READYDIR/$1/${1}*cf.txz ]; then
    upgradepkg --install-new $READYDIR/$1/${1}*cf.txz
  elif [ -e $REPODIR/$1/${1}*cf.txz ]; then
    upgradepkg --install-new $REPODIR/$1/${1}*cf.txz
  else
    echo "ERROR. Manca $1"
    exit 1
  fi

}

_findep() {

if [ -d $WORKDIR/$1 ]; then
  cd $WORKDIR/$1
elif [ -d $READYDIR/$1 ]; then
  cd $READYDIR/$1
elif [ -d $BUILDIR/$1 ]; then
  cd $BUILDIR/$1
else
  cd $CWD
fi

if [ -e slack-required ]; then
  DEP=($(cat slack-required | cut -d" " -f1))
else
  source ./$1.info
  REQA=$(echo $REQUIRES | sed 's/,//g')
  DEP=($REQA)
fi

if [[ ${DEP[@]} ]]; then
  for pkg in "${DEP[@]}"; do
    if ! echo ${DEPS[@]} | tr - _ | grep -q -w "$(echo $pkg | tr - _)"; then
      if [ $pkg != $NAMEPKG ]; then
        DEPS+=($pkg)
        _findep $pkg
      fi
    fi
  done
fi
_instpkg $1
}

_findep $NAMEPKG


la directory ready è la directory dove appoggio i pacchetti pronti in modo poi da lanciare vari script che mi creano il changelog.



targzeta ha scritto:Che test fa per capire se la directory Palla esiste nella directory sviluppo?

[/quote]

Codice: Seleziona tutto

if [ -d $WORKDIR/$1 ]; then
  cd $WORKDIR/$1
elif [ -d $READYDIR/$1 ]; then
  cd $READYDIR/$1
elif [ -d $BUILDIR/$1 ]; then
  cd $BUILDIR/$1
else
  cd $CWD
fi

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6525
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: problema con bash e flusso dello script

Messaggioda targzeta » dom mag 26, 2019 0:44

Quando lanci il ciclo, l'* viene sostituito dall'insieme delle directory presenti attualmente. Però i comandi che lanci ogni volta sono indipendenti. Quindi se poi la directory si popola con nuove directory, lo script blankpkg dovrebbe vederle. Sei sicuro che quando compila Pippo, la directory Palla sia presente? L'unica è mettere qualche "echo" nello script che cerca la dipendenza nel fs locale.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
conraid
Staff
Staff
Messaggi: 13296
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: problema con bash e flusso dello script

Messaggioda conraid » lun mag 27, 2019 12:24

targzeta ha scritto:Quando lanci il ciclo, l'* viene sostituito dall'insieme delle directory presenti attualmente. Però i comandi che lanci ogni volta sono indipendenti. Quindi se poi la directory si popola con nuove directory, lo script blankpkg dovrebbe vederle. Sei sicuro che quando compila Pippo, la directory Palla sia presente? L'unica è mettere qualche "echo" nello script che cerca la dipendenza nel fs locale.

Emanuele


Sì, son sicuro, perché per esempio, se formo lo script e lo rilancio la riconosce bene. È come se prendesse solo i pacchetti presenti al momento del lancio del primo script. Cercherò di fare qualche debug. Thanks-