Como eu passo um caminho de arquivo para uma função em vez do conteúdo do arquivo?

0

Estou usando o shell bash no Ubuntu Linux. Eu tenho isso no meu script

output_file=create_test_results_file "$TFILE1"

Por meio de instruções echo, verifiquei que o valor de $ TFILE1 é um caminho de arquivo, por exemplo,

/tmp/run_tests.sh1.7381.tmp

Mas quando eu executo meu script, de alguma forma o conteúdo do arquivo está sendo passado para a minha função, cujo conteúdo é

#!/bin/bash

create_test_results_file () {
        RESULTS_INPUT_FILE=$1
        OUTPUT_FILE="/tmp/output'date +%m'_'date +%d'_'date +%y'.txt"
        touch $OUTPUT_FILE
        marker=""
        num_passed=0
        num_failed=0
        while read p; do
                if [[ $p == *"√"* ]]; then
                        if [[ $p == *"PASSED"* ]]; then
                                num_passed=$((num_passed+1))
                        elif [[ $p == *"WARNING"* ]]; then
                                num_failed=$((num_failed+1))
                        fi
                elif [ $num_passed -gt 0 -o $num_failed -gt 0 ]
                then
                        echo "second branch"
                        echo "$marker PASSED: $num_passed, WARNING: $num_failed" >> $OUTPUT_FILE
                        marker=$p
                        num_passed=0
                        num_failed=0
                else
                        marker=$p
                fi
        done <"$RESULTS_INPUT_FILE"

        # Add un-added lines
        if [ $num_passed -gt 0 -o $num_failed -gt 0 ]
        #if [ \( "$num_passed" -gt 0 -o "$num_failed" -gt 0 \) -a \( -z "$marker" \) ]
        then
                echo "$marker PASSED: $num_passed, FAILED: $num_failed" >> $OUTPUT_FILE
        fi
        echo $OUTPUT_FILE
}

porque recebo erros como

/tmp/run_tests.sh1.7381.tmp: line 1: Validation: command not found
/tmp/run_tests.sh1.7381.tmp: line 2: 2017-04-20: command not found
/tmp/run_tests.sh1.7381.tmp: line 3: Login: command not found
/tmp/run_tests.sh1.7381.tmp: line 4: $'\E[1': command not found

As palavras "Validação", "2017-04-20" e assim por diante, são todos os conteúdos do arquivo. Qual é a maneira correta de passar o caminho do arquivo como um argumento e não tê-lo interpretado literalmente?

    
por Dave 20.04.2017 / 20:54

1 resposta

2

A linha de comando para chamar sua função:

output_file=create_test_results_file "$TFILE1"

Isso atribuirá o valor create_test_results_file à variável output_file antes de executar o comando "$TFILE1" .

Eu acredito que você queria fazer

output_file=$( create_test_results_file "$TFILE1" )

Isso atribui a saída de create_test_results_file "$TFILE1" à variável output_file .

Existem várias coisas que podem ser comentadas neste script, mas vou escolher esta linha:

OUTPUT_FILE="/tmp/output'date +%m'_'date +%d'_'date +%y'.txt"

Isto é melhor escrito como

OUTPUT_FILE=$( date +"/tmp/output%m_%d_%y.txt" )

Também relacionado:

por 20.04.2017 / 21:05