我试图创建一个expect_commands
bash函数来检查正则表达式是否存在于文件中:
function expect_commands
{
args_array=()
for (( i = 2; i <= $#; i++ )); do
args_array[i]=${!i}
if grep -Fxqe "${args_array[$i]}" "$hist_file" || grep -Fxqe "${args_array[$i]}/" "$hist_file" || grep -Fxqe "${args_array[$i]} " "$hist_file" || grep -FxqE "${args_array[$i]}" "$hist_file"
then
response "$1" $COUNT
else
tell_error "$1" $COUNT
fi
done
}
使用以下参数调用该函数:
expect_commands "remove entire ~/workspace/test-website/css directory" "rm -r test-website/css" "rm -r test-website/css/" "rm -Rf ~/workspace/test-website/css" "rm -rf ~/workspace/test-website/css" "rm -R ~/workspace/test-website/css"
其中参数$1
是任务。
从$2
到结尾的参数是用户可以输入到终端的每种可能组合。
这些输入保存在~/.bash_history
文件中,并使用grep
从那里进行评估:
if grep -Fxqe "${args_array[$i]}" "$hist_file" || grep -Fxqe "${args_array[$i]}/" "$hist_file" || grep -Fxqe "${args_array[$i]} " "$hist_file" || grep -FxqE "${args_array[$i]}" "$hist_file"
该函数传递的输入如下:
rm -r test-website/css
rm -r test-website/css/
但是当涉及到:
rm -Rf ~/workspace/test-website/css
rm -rf ~/workspace/test-website/css
rm -R ~/workspace/test-website/css
grep
无法匹配这些行。
添加-FxqE选项时:
grep: conflicting matchers specified
有什么想法吗?
答案 0 :(得分:0)
您的功能可以简化:为什么需要一个数组来保存参数?
function expect_commands {
local label=$1
shift
for arg do
arg=$( sed "s/ ~/ $HOME/g" <<< "$arg" ) # translate ~ to $HOME
if grep -Fxq -e "$arg" -e "$arg/" -e "$arg " "$HISTFILE"
then
response "$label" $COUNT
else
tell_error "$label" $COUNT
fi
done
}
什么是$COUNT
?避免全局变量。