WSL单分支if-else脚本异常:执行OR两端命令问题排查
WSL挂载U盘脚本问题修复
你当前用[[ $# -eq 0 ]] && cmd1 || cmd2的写法存在逻辑陷阱——当条件为真但cmd1执行失败时,会触发||后的cmd2执行。比如无U盘连接时,[[ $# -eq 0 ]]为真,执行挂载D盘的命令但失败,此时整个&&表达式返回非0,就会执行右侧的挂载命令,导致两端内容都被执行。这种写法不等于标准if-else,因为它依赖的是前一个命令的退出码,而非初始条件。
修复后的脚本
改用标准if-else结构,就能严格按照初始条件分支执行:
#!/bin/bash if [[ $# -eq 0 ]]; then sudo mount -t drvfs D: /pen else sudo mount -t drvfs "${1}": /pen fi # 根据挂载结果输出提示 if [[ $? -eq 0 ]]; then echo "Good" else echo "Bad" fi
可选优化建议
- 提前检查挂载点是否存在,避免因目录缺失导致挂载失败:
# 在挂载逻辑前添加 if [[ ! -d /pen ]]; then sudo mkdir -p /pen fi - 增加盘符合法性校验,防止输入无效格式:
if [[ $# -gt 0 ]]; then if [[ ! "${1}" =~ ^[A-Z]$ ]]; then echo "错误:盘符必须是单个大写字母(如D)" exit 1 fi sudo mount -t drvfs "${1}": /pen else sudo mount -t drvfs D: /pen fi
内容的提问来源于stack exchange,提问作者Pau
相关产品推荐
相关产品推荐

