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.
Rispondi
Avatar utente
conraid
Staff
Staff
Messaggi: 13460
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

problema con bash e flusso dello script

Messaggio da conraid »

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: 6556
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: problema con bash e flusso dello script

Messaggio da targzeta »

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: 13460
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: problema con bash e flusso dello script

Messaggio da conraid »

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: 6556
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: problema con bash e flusso dello script

Messaggio da targzeta »

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: 13460
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: problema con bash e flusso dello script

Messaggio da conraid »

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-

Rispondi