如何将文件路径而不是文件内容传递给函数?

如何将文件路径而不是文件内容传递给函数?

我在 Ubuntu Linux 上使用 bash shell。我的脚本中有这个

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" )

还相关:

相关内容