大学OOP作业提交Bash脚本报No such file or directory错误
报错原因
这个报错是两个Bash语法使用错误共同导致的:
- Bash 不会自动解析变量拼接出来的
~家目录符号:Bash对~开头的用户家目录解析发生在变量替换步骤之前,你写的~${PROFESSOR}写法,不会被识别为「对应用户主目录下的路径」,只会被当成当前工作目录下字面量名为~profF1.profL1的文件,自然找不到对应路径。 - 引号位置错误打乱了命令结构:官方提交命令的结构是可执行程序路径 + 空格分隔的传入参数,也就是
~profFirst.profLast/submit是要运行的程序,后面的244/w#/p#、可选的-due是传给程序的参数。你原来的写法把submit 244包在引号内,相当于把带空格的字符串当成了程序路径的一部分,完全拼错了路径结构。
另外你脚本里的[ -z $1 ]写法没给变量加引号,当$1为空时会触发条件判断的语法错误。
修改方案
- 借助
eval完成带变量的~家目录路径解析,不要直接拼接~和变量写路径 - 所有传给提交程序的参数不要和程序路径混写在引号里,按空格分隔独立传递
- 给条件判断里的变量加上双引号,避免空值触发语法错误
修正后的完整脚本如下:
#!/bin/bash echo "#####################################" echo "Submit OOP WS!🧑🏻💻" read -p "What Professor? (fs/ht): " SHORTPROF if [ "$SHORTPROF" = fs ] then PROFESSOR="profF1.profL1" elif [ "$SHORTPROF" = ht ] then PROFESSOR="profF2.profL2" else echo "Professor not found." exit 1 fi read -p "What Workshop Number?: " WORKSHOPNUMBER read -p "What Part?: " PARTNUMBER # 正确解析教授账户下submit程序的完整路径 SUBMIT_PATH=$(eval echo "~${PROFESSOR}/submit") ASSIGN_PATH="244/w${WORKSHOPNUMBER}/p${PARTNUMBER}" # 按命令+参数的格式调用,可选-due作为独立参数传递 if [ "$1" = "d" ] then "$SUBMIT_PATH" "$ASSIGN_PATH" -due else "$SUBMIT_PATH" "$ASSIGN_PATH" fi
修改后脚本会先正确解析到教授账户下的submit程序路径,再把作业编号、可选的due参数按格式传给程序,和官方要求的提交命令逻辑完全一致。
内容的提问来源于stack exchange,提问作者Sebastian Rubina
相关产品推荐
相关产品推荐

