TEST で grep を使用すると (18 行目)、完全に機能します。まったく同じコマンドを実行しても、for ループ内 (40 行目) では機能しません。なんで?私はこの問題に頭を悩ませてきました。
#!/bin/bash
clear
sourcelist=`ls *.c`
headerlist=`ls *.h`
FILE="headers.txt"
TEST="receive_elevator_data" #this is one typical entry in headers.tex
echo "TEST"
grep $TEST *.c -n
MODE="h"
if [ "$MODE" = "h" ]
then
echo "Searching.."
#for entry in $(cut -f 1 $FILE)
for entry in `cat $FILE`
do
echo "Looking at entry in $FILE: "
echo $entry
echo "Press any button to search, <s> for skip, <e> to exit"
read -e INPUT2
if [ "$INPUT2" = "s" ]
then
continue
fi
if [ "$INPUT2" = "n" ]
then
exit 1 #exit shell script
else
grep -n "${entry}" ${sourcelist}
fi
done
fi
明確にするために: headers.txt のすべての行には、「test」のような文字列があります。つまり、行にスペースはありません。headers.txt に実際に含まれているのは、C プロジェクトのすべてのヘッダーファイルから抽出された関数名のリストです:) 以前のコードではエラーは返されませんでした。実行されなかったのはループ内の grep コマンドだけでした。私がやりたいことは、headers.txt の各関数についてすべての C ファイルを検索し、各検索の前にプロンプトを表示することです。