Chamando 'source' da função bash

4

Estou tentando criar um arquivo cujo nome é passado de stdin. Meu plano é criar uma função assim:

mySource() {
    # get stdin and pass it as an argument to 'source'
    source $(cat)
}

para ser chamado assim: $ echo "file1.sh" | mySource em que file1.sh é:

FILE=success
export FILE

Supondo que $FILE seja inicializado em hello world , quando eu executar $ echo "file1.sh" | mySource , espero que $ echo $FILE imprima success ; no entanto, em vez disso, imprime hello world .

Existe alguma maneira de obter um arquivo de uma função?

    
por weberc2 14.08.2014 / 18:03

1 resposta

6

Você pode alterar sua função mySource para:

mySource() {
  source "$1"
}

Em seguida, chamando-o com:

$ mySource file.sh
$ printf '%s\n' "$FILE"
success

Você também pode fazer com que mySource lide com vários arquivos:

mySource() {
  for f do
    source "$f"
  done
}
    
por 14.08.2014 / 20:30

Tags