Newsgroup: it.comp.os.linux.sys
Titolo: Korn shell .... :(((

All ,
 vi sottopongo un problemino che a quest'ora con i pochi neuroni rimasti
attivi (si fa per dire) non ce la faccio più ad affrontare.
 In uno script in cui controlli che x sia uguale a y devo chiedere a chi
esegue lo script in caso x != y se vuole che lo cambi.
Lo scritp (in Korn shell appunto) è tipo :
[skip]
function bla
{
  # prima controllo x poi:
  if [[ ( "$x" != "$y" ) && ( "$bla" != "" ) ]]; then
        echo " x!= y !!! " | tee -a $OUTPUT
        if [ $change -eq 1 ];then
           echo "Do you want etc etc ? [ y | n ] "
           read ans
           echo "ans = $ans"
           if [ "$ans" = "y" ];then
              echo "Changing ... "
           fi
        fi
     fi
}
[skip]
case $qualcosa in
      1) ... ;;
      2) bla ;; ## qui richiamo la funzione sopra
      3) ... ;;
      *) exit 1 ;;
esac
il tutto 'funziona' se non che 'read' non mi chiede un tubo, senza darmi se
errore ne niente :
<copy from term with debug on>
+ read ans
+ echo ans =
ans =
</copy>
Ora viene il bello, e se siete arrivati fino a qua ve lo meritate, se sposto
il tutto (paro paro) fuori dalla funzione, tutto va che è una meraviglia.
Ergo, sembrerebbe che solo quando è dentro una function non mi chieda
l'input.
Ho provato con bash con una struttura simile:
#> cat test.sh
echo "pippo? "
read pippo
echo "pippo1= $pippo"
function leggi () {
echo "pippo?"
read pippo
if [ $pippo = y ]; then
        echo "pippo2= $pippo"
fi
}
case $1 in
        a) leggi;;
        *) exit 0;;
esac
#> ./test.sh a
pippo?
n
pippo1= n
pippo?
y
pippo2= y
Che sia un problema legato allo STDIN quando il controllo è dentro una
funzione? .. chiedo lumi ai guru ... :((
 Dave
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


ho provato a cambiare il read con :
   PS3="Che vu fa' ? "
   select action in "Cambia " "Stampa i due valori" \
                        "Ingnora" "Esci"
    do
       case $action in
                  Cambia) echo "Changing permission ... ";;
                  Stampa*) echo "Stamping permission ... ";;
                  Ignora*) echo "Ignoring permission ... ";;
                  Esci) echo "Exitinng permission ... ";;
       esac
    done
ma come prima (usando debug mode):
[skip]
+ [ 1 -eq 1 ]
+ PS3=Vuoi cambiare il valore?
1) Cambia
2) Stampa i due valori
3) Ingnora
4) Esci
Vuoi cambiare il valore? + read line
          ## qui dovrebbe chiedermi il valore ma non si ferma
+ [[ -f /tmp/.testlist.2004Apr150930.13773 ]]
[skip]
ci fossero almeno dei manuali/doc decenti sulla korn, sto cercando ma non ho
trovato niente, any help almeno riguardo i doc?
 Tx anyway,


  Dave
ciao ...
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}

non so se questa puo' essere una soluzione, ma potresti provare,
non si sa mai. dato che potrebbe essere una questione di stdin,
prova ad usare la funzione prompt riportata sotto. l'ho presa (e
adattata un po') non so da dove per uno script in ksh che dava
problemi con il read.
la usi cosě:
     prompt "Che vu fa' ? " action
     case $action in
         ...
         ...
     esac
prompt() {
# $1: messaggio da stampare
# $2: variabile dove salvare la scelta effettuata
    local PROMPT
    local PROMPT_ANSWER
    if [ -z "`echo -n`" ]; then
       # berkeley style
       PROMPT='echo -n'
       PROMPT_EOL=""
    else
       # sysV style
       PROMPT='echo'
       PROMPT_EOL='\c'
    fi
    $PROMPT "$1" $PROMPT_EOL; read PROMPT_ANSWER
    if [ ! -z "$2" ]; then
       eval "$2=\"$PROMPT_ANSWER\""
    fi
}


letti ora - ma non rispondono al mio problema, sigh ..
 Comunque grazie del supporto! ;)


Il 15 Apr 2004, 10:18, Jigen Daisuke <jigen....@SUCKYOURSPAMtele2.it> ha
scritto:
con delle opportune modifiche (dovute probabilmente alla versione del OS e
Shell :
<cut>
#!/bin/ksh
prompt() {
# $1: messaggio da stampare
# $2: variabile dove salvare la scelta effettuata
    if [ -z "`echo -n`" ]; then
       # berkeley style
       PROMPT='echo -n'
       PROMPT_EOL=""
    else
       # sysV style
       PROMPT='echo'
       PROMPT_EOL='\c'
    fi
    $PROMPT "$1" $PROMPT_EOL; read PROMPT_ANSWER
    if [ ! -z "$2" ]; then
       eval "$2=\"$PROMPT_ANSWER\""
    fi
}
     prompt "Che vu fa' ? " action
     case $action in
         stamp) echo "stamp";;
         salt) echo "salt";;
         esc) echo "esc";;
     esac
</cut>
comunque avevo già provato con un altro sistema ma sempre a demandare ad una
funzione il dover chiedere l'input - e se quello sopra in un altro script
funziona, copiato nel mio non funziona più, quindi almeno sappiamo che non è
un problema di shell o di environment ma solo di quello script .. chissa che
cosa ho scritto prima per fargli fare così! ;) La storia continua ...
 grazie! ;)
 Davide


 scritto:
FYI:
Ho capito qual'era il problema alla fine, il read lo eseguivo in una
struttura che era annidiata dentro un
ES:
function bla {
    ..
    read
    ..
}
case a in
        b) cat $ST | while read line
               do
                   ...
                   bla
               done;;
        c) ;;
e il primo read non premette ad altri read di mettersi in listen sullo
stdin.
 Dave
