Bash

如何將文件路徑而不是文件內容傳遞給函式?

  • May 20, 2018

我在 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”等字樣都是文件的內容。將文件路徑作為參數傳遞而不是按字面解釋的正確方法是什麼?

呼叫函式的命令行:

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

還有相關的:

引用自:https://unix.stackexchange.com/questions/360278