You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:37:38