Bash猜数字游戏脚本无法访问AnswerDebug.sh,求解决方法
Bash猜数字游戏文件访问错误修复及优化方案
错误原因分析
- 脚本执行过程中通过
cd切换目录后未正确返回原始路径,导致再次调用bash AnswerDebug.sh时,当前工作目录已不是脚本所在目录,无法找到目标文件。 - 冗余的
chmod +x AnswerDebug.sh命令,脚本已能运行说明权限足够,该命令只会因路径问题额外报错。
修复方案
1. 确保脚本能定位自身
在脚本开头添加代码获取自身绝对路径,不受当前工作目录变化影响:
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd) SCRIPT_PATH="$SCRIPT_DIR/AnswerDebug.sh"
后续重启游戏时使用该路径:bash "$SCRIPT_PATH"
2. 安全管理目录切换
用pushd和popd替代直接cd,操作完成后自动回到原始目录,避免路径混乱:
# 保存当前目录 pushd . > /dev/null # 处理用户目录和分数目录 if [ ! -d "$name" ]; then mkdir -p "$name/Scores" fi cd "$name/Scores" # 此处可添加计分相关读写操作 # 返回原始目录 popd > /dev/null
3. 修正数字比较逻辑
原脚本用=对比数字,改为-eq更符合Bash数字比较规范,避免字符串比较的潜在问题。
修复后的完整脚本
# 获取脚本自身绝对路径 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd) SCRIPT_PATH="$SCRIPT_DIR/AnswerDebug.sh" random=$((1 + $RANDOM % 10)) read -p "Enter A UserName: " name # 安全处理用户目录与分数目录 pushd . > /dev/null if [ ! -d "$name" ]; then mkdir -p "$name/Scores" fi cd "$name/Scores" # 计分系统示例(取消注释即可完善) # if [ -f score.txt ]; then # current_score=$(cat score.txt) # else # current_score=0 # fi popd > /dev/null echo 'Guess a number between 1 and 10' read -p "Enter your guess: " r if [ "$r" -eq "$random" ]; then echo "Great job, $name! You guessed correctly." # 猜对加分逻辑 # pushd . > /dev/null # cd "$name/Scores" # new_score=$((current_score + 10)) # echo "$new_score" > score.txt # echo "Your score is now $new_score" # popd > /dev/null else echo "Nope, $name! The correct number was $random." fi echo 'Want to play again? (y for yes, n for no)' read m if [ "$m" = "y" ]; then bash "$SCRIPT_PATH" elif [ "$m" = "n" ]; then echo 'Thanks for playing!' else echo "Invalid input, $name. Exiting game." fi
计分系统完善提示
- 在用户的
Scores目录下创建score.txt存储分数 - 猜对时增加固定分值(如+10),猜错可选择不加分或少量扣分
- 每次游戏开始前读取当前分数,结束后更新写入文件
内容的提问来源于stack exchange,提问作者haritanshu93
相关产品推荐
相关产品推荐

