Ah... mas veja só echo "bem" echo Valores [EMAIL PROTECTED]
tanto a variavel $? quanto o vetor PIPESTATUS se referem ao ultimo processo executado pelo script. nesse seu exemplo, vc esta vendo o codigo de retorno da instrução -> echo "bem" O ideal é guardar esse vetor assim: MEUVETOR=( [EMAIL PROTECTED] ) # logo depois do comando e ir para o abraço :) On 10/30/07, Carlos Ferreira <[EMAIL PROTECTED]> wrote: > > Julio, > fiz o teste e deu retorno diferente: > > #! /bin/bash > Install(){ > echo "testes que só fazem perder tempo" > return 34 > } > > if ( Install | tee teste1.rep ) ##executa as funções e guarda os output > then > echo "bem" > echo Valores [EMAIL PROTECTED] > echo PIPE0=$PIPESTATUS[0] PIPE1=$PIPESTATUS[1] > else echo "mal" > fi > echo retorno=$? > echo pipe1=$PIPESTATUS[1] pipe2=$PIPESTATUS[2] > echo [EMAIL PROTECTED] > > exit 0 > > Resultado obtido: > > $ ./teste_pipe.sh > testes que só fazem perder tempo > bem > Valores vetPIPE=0 > PIPE0=0[0] PIPE1=0[1] > retorno=0 > pipe1=0[1] pipe2=0[2] > 0 > > -- > Carlos Ferreira > Analista de Desenvolvimento > Niterói - RJ - Brasil > LinuxUser #271002 > http://www.carnivorosemdentes.blogger.com.br/ > ================ > > Em 30/10/07, Julio C. Neves <[EMAIL PROTECTED] <08years%40gmail.com>> > escreveu: > > > > Olá Miguel, > > vou te explicar o que está acontecendo, mas vc terá de estudar um pouco. > É > > muito comum as pessoas confundirem o uso do if eo uso do cmd test. A > > melhor > > forma de vc aprender para sempre o uso destes cmds é ler este texto > sobre > > o > > if< > > > http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo003#Comandos_Condicionais > > >e > > este > > texto sobre o test< > > > http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo004#O_Comando_test > > >. > > Vc não perderá mais de 30 min para aprender e se quiser aproveitar e ir > > convertendo para o Português Europeu, será muito bem vindo. > > > > O par de parênteses quadrados (que no Brasil chamamos de colchetes) é o > > cmd > > test, que serve para testar condições, porém sem dar resultado algum a > não > > ser o $?. Nas outras linguagens que estamos habituados, quem testa > > condições > > é o if no shell, como vimos, é o test e o if testa se uma instrução foi > > bem > > executada ou não. > > > > Assim, o seu if deveria testar a execução da sua função. Para entender > > isso, > > deixe a função como vc definiu e faça o seguinte: > > > > $ if Install > > > then > > > echo Resultado OK > > > else > > > echo $? > > > echo Resultado NOK > > > fi > > testes que só fazem perder tempo > > 34 > > Resultado NOK > > > > Até aí tudo funciona com o esperado, porém vejamos o que acontece se > > adicionarmos um tee: > > > > $ if Install | tee teste1.rep > > > then > > > echo Resultado OK > > > else > > > echo $? > > > echo Resultado NOK > > > fi > > testes que só fazem perder tempo > > Resultado OK > > > > Epa! Não era esse o resultado esperado! Vamos agora adicionar o vetor > > (array) PIPESTATUS que o Tiago mencionou para entender o que está > > acontecendo: > > > > $ if Install | tee teste1.rep > > > then > > > echo [EMAIL PROTECTED] > > > echo bem > > > else > > > echo mal > > > fi > > testes que só fazem perder tempo > > 34 0 > > bem > > > > Ahhh, agora dá para entender o que houve... Repare que o retorno do pipe > > foi > > 34 e zero, e assim sendo o zero representa cmd bem executado e por isso > > ele > > executa os cmds do then e não os do else como esperávamos. A forma de > > contornar isso seria: > > > > $ Install | tee teste1.rep > > testes que só fazem perder tempo > > $ if [ ${PIPESTATUS[0]} -eq 34 ] > > > then > > > echo mal > > > else > > > echo bem > > > fi > > mal > > > > Abraços aos amigos portugueses, > > Julio > > > > Em 29/10/07, miguelcm86 <[EMAIL > > PROTECTED]<miguelcm86%40yahoo.com.br><miguelcm86%40yahoo.com.br>> > > > escreveu: > > > > > > Pensei que houvesse uma solução mais fácil.. estou a testar, mas além > > > de não perceber muito bem como é que isso funciona, eu chamo todas > > > pipesatus [0] e [1] e [2] e estão todos a 0. > > > aqui está o codigo: > > > > > > #! /bin/bash > > > Install(){ > > > echo "testes que só fazem perder tempo" > > > return 34 > > > } > > > > > > if ( Install | tee teste1.rep ) ##executa as funções e guarda os > output > > > then echo "bem" > > > echo $PIPESTATUS[0] $PIPESTATUS[1] > > > else echo "mal" > > > fi > > > echo $PIPESTATUS[1] $PIPESTATUS[2] > > > > > > exit 0 > > > > > > por mais que altere o 34 para o 0 e outro valor o output é sempre > este: > > > [EMAIL PROTECTED]:~$ ./teste1.sh > > > testes que só fazem perder tempo > > > bem > > > 0[1] 0[2] > > > 0[1] 0[2] > > > [EMAIL PROTECTED]:~$ > > > > > > isto assim diz que está a receber demasiados arguementos: > > > if [ `Install | tee teste1.rep` ] > > > > > > output: > > > ./teste1.sh: line 10: [: demasiados argumentos > > > > > > --- Em > > > shell-script@yahoogrupos.com.br<shell-script%40yahoogrupos.com.br><shell-script%40yahoogrupos.com.br><shell-script%40yahoogrupos.com.br>, > > > > "Tiago Barcellos Peczenyj" > > > <[EMAIL PROTECTED]> escreveu > > > > > > > > > > > On 10/29/07, miguelcm86 <[EMAIL PROTECTED]> wrote: > > > > > > > > > > olá pessoal > > > > > > > > > > o que se passa é simples > > > > > > > > > > -Tenho que chamar uma função install, guardar todo o seu output > > > dentro > > > > > de um arquivo e saber qual o return que recebo da função install. > > > > > Estou a fazer desta maneira que está errada, queria saber como > > > resolvo. > > > > > > > > > > Install(){ > > > > > ...... > > > > > return variavel > > > > > } > > > > > > > > > > if [ Install | tee install.rep ] > > > > > then echo "return = 0" > > > > > else echo "return = 1" > > > > > fi > > > > > > > > > > uso o comando tee porque quero no install.rep todo o output no > > > ficheiro. > > > > > > > > > > > > > Miguel, > > > > > > > > a palavra "return" em uma função é semelhante ao exit de um script, > > > > porém interrompe apenas a função, e o seu resultado pode ser lido > pela > > > > variavel $? e pode ser usado nas operações && e || > > > > > > > > function xxx() { > > > > return 12 > > > > } > > > > > > > > $ xxx > > > > > > > > $ echo $? > > > > 12 > > > > > > > > Agora, quando vc esta trabalhando com pipes, esse resultado é > > > > armazenado em um vetor chamado PIPESTATUS, que guarda o retorno de > > > > cada processo > > > > > > > > $ xxx | tee supimpa > > > > > > > > [EMAIL PROTECTED] ~ > > > > $ echo [EMAIL PROTECTED] > > > > 12 0 > > > > > > > > certo, mano ? > > > > > > > > Existem outras alternativas como usar sinais, mas por enquanto deve > > > bastar ;-) > > > > > > > > -- > > > > Tiago B Peczenyj > > > > Linux User #405772 > > > > > > > > http://peczenyj.blogspot.com/ > > > > > > > > > > > > > > > > > -- > > Abraços, > > Julio > > http://www.julioneves.com - Um livro sobre Bash completo e on-line > > :wq > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Tiago B Peczenyj Linux User #405772 http://peczenyj.blogspot.com/ [As partes desta mensagem que não continham texto foram removidas]