파일 내용 대신 파일 경로를 함수에 전달하려면 어떻게 해야 합니까?

파일 내용 대신 파일 경로를 함수에 전달하려면 어떻게 해야 합니까?

저는 Ubuntu Linux에서 bash 쉘을 사용하고 있습니다. 내 스크립트에 이것이 있습니다

output_file=create_test_results_file "$TFILE1"

echo문을 통해 $TFILE1의 값이 파일 경로인 것을 확인했습니다.

/tmp/run_tests.sh1.7381.tmp

하지만 스크립트를 실행하면 파일 내용이 어떻게든 내 함수에 전달되고 그 내용은 다음과 같습니다.

#!/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
}

왜냐하면 다음과 같은 오류가 발생하기 때문입니다.

/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

"Validation", "2017-04-20" 및 기타 단어가 이 파일의 내용입니다. 파일 경로를 문자 그대로 해석하지 않고 매개변수로 전달하는 올바른 방법은 무엇입니까?

답변1

함수를 호출하는 명령줄:

output_file=create_test_results_file "$TFILE1"

그러면 명령을 실행하기 전에 변수에 값이 할당됩니다 create_test_results_file.output_file"$TFILE1"

나는 당신이 원할 것이라고 믿습니다

output_file=$( create_test_results_file "$TFILE1" )

이는 출력을 create_test_results_file "$TFILE1"변수에 할당합니다 output_file.


이 스크립트에는 여러 가지 주석을 추가할 수 있지만 다음 줄을 선택하겠습니다.

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

이것은 다음과 같이 쓰는 것이 더 좋습니다.

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

또한 관련:

관련 정보