Bash
如何將文件路徑而不是文件內容傳遞給函式?
我在 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" )
還有相關的: