Get Retorna o valor do sub shell script

1

Eu tenho um script de shell, onde inicio um novo script .sh. Agora quero salvar o valor de retorno do sub-script em uma variável.

Eu encontrei este script:

#!/bin/bash
r=1
while [[ r -ne 0 ]]
do
r='vx $* < \'tty\' > \'tty\''
done
exit 0

Chama o Script vx com um param e salva o valor de retorno na variável r. O que o tty ... significa? Esse é o valor de retorno? Não posso usar $? para o valor de retorno?

Obrigado!

Editar:

Então, seria o seguinte errado?

#!/bin/bash

returnvalue=1

while  [ $returnvalue -ne 0 ]
do
    bash ./vx $1
    returnvalue=$?
done
    
por John Smithv1 02.03.2013 / 19:22

3 respostas

2

Acredito que você realmente quer:

#! /bin/sh -
until rv "$@"; do
  continue
done

Você geralmente não precisa obter o valor real do status de saída ( $? ) nem saber se 0 significa verdadeiro ou falso. A construção until , while , if ... cuida disso. O continue acima é apenas para legibilidade, você pode colocar qualquer comando lá, incluir o não-operacional: : .

Nunca use $* ou $@ sem aspas, isso não faz sentido.

    
por 02.03.2013 / 20:45
0

Você salvará a saída do script em "r", o código de saída estará em $ ?.

Então, basta adicionar uma linha antes de "terminar"

result=$?
    
por 02.03.2013 / 20:20
0

Na expressão

r='vx $* < \'tty\' > \'tty\''

O Bash interpreta vx como um nome de arquivo executável para o qual você passa todos ( $* ) dos argumentos passados para o script atual após a expansão do shell. Por exemplo, se os argumentos para o script forem * 'ls /dev' , a lista de argumentos passada para vx será o nome de todos os arquivos no diretório atual, além dos nomes de todos os arquivos em /dev . O número de argumentos será o mesmo que o número de nomes de arquivos.

vx é assumido para aceitar entrada em sua entrada padrão.

tty é um executável que retorna uma string que o Bash interpreta como um nome de arquivo.

Observe que a primeira chamada de tty poderia retornar um nome de arquivo diferente da segunda invocação ', por exemplo, se tty produzir o nome do arquivo com base em alguma condição externa, como o conteúdo do arquivo com o nome produzido pelo invocação anterior ou com base em um registro de data e hora ou outra condição externa que pode mudar.

A expressão r='...' atribui a saída padrão do comando backticked a r . O valor de retorno da expressão retrocedida está em $? .

Como a saída padrão de vx é redirecionada para o nome do arquivo produzido pela segunda chamada de tty , o valor de r sempre estará vazio ( r= ), que é o mesmo que r=0 em a expressão [[ r -ne 0 ]] . O resultado é que não há situação em que o loop possa ser executado mais de uma vez.

    
por 02.03.2013 / 20:41

Tags