好的,介绍一些背景信息。我一直在用 Bash 编写一个项目,它本质上是查看您是否在 ubuntu 计算机上执行了某些操作,并对您的表现进行评分,其中之一就是回答问题或禁用访客帐户。运行的文件 (init.sh) 会创建一个新的 shell 脚本 (engine.sh),该脚本实际上会根据用户想要评分的内容进行评分。
现在的问题是:到目前为止,我输出到引擎的所有检查都有效,但是当我进行这个特定的检查(检查文件是否给出了特定的答案)时,它会在引擎中添加一个换行符。
涉及的功能:
createVuln() {
type="$1"
points=$2
var1="$3"
var2="$4"
var3="$5"
var4="$6"
var5="$7"
test=$("$type" "test" "$var1" "$var2" "$var3" "$var4" "$var5")
message="$("$type" "message" "$var1" "$var2" "$var3" "$var4" "$var5")"
vuln="
if [ ${test} ]; then
scorePoints \"$points\" \"$message\"
fi "
echo "$vuln" >> vulns
totalvulns=$(($totalvulns + 1))
totalpoints=$(($totalpoints + $points))
}
createForensics() {
outputType="$1"
question="$2"
answer="$3"
fileName="$4"
if [ "$outputType" = "test" ]; then
touch "$fileName"
echo "Forensics Question:" > "$fileName"
echo "$question" >> "$fileName"
echo "" >> "$fileName"
echo "ANSWER: " >> "$fileName"
mv "$fileName" "/home/$sysUser/Desktop/"
echo "\"\$(grep \"ANSWER: $answer\" \"/home/$sysUser/Desktop/$fileName\")\" != \"\""
elif [ "$outputType" = "message" ]; then
echo "Solved ${fileName}"
fi
}
如果我运行这个
createVuln createForensics 8 'What is the UID of the user root?' 0 'Forensics Question 1'
这会输出到 vulns 文件:
if [
"$(grep "ANSWER: 0" "/home/user/Desktop/Forensics Question 1")" != "" ]; then
scorePoints "8" "
Solved Forensics Question 1"
fi
预期输出:
if [ "$(grep "ANSWER: 0" "/home/user/Desktop/Forensics Question 1")" != "" ]; then
scorePoints "8" "Solved Forensics Question 1"
fi
显然,这些换行符会破坏引擎。我从中复制取证函数的代码不会这样做。当我从终端运行 createForensics 函数中的实际回显时,它们不会输出换行符……事实上,if 语句甚至输出正确。那么是什么导致了这些换行符?!?
答案1
我和我的朋友刚刚意识到:git 存在一个问题,它没有推送解决此问题的特定更改。有一个空白行最初没有重定向到 $fileName ,现在您可以看到有一个重定向。我猜当我提交并推送时,我决定不带走它。