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

求助:修复Bash菜单脚本中的目录重命名功能

问题分析与解决

你的目录重命名功能失效的核心原因是没有正确捕获用户输入的两个目录名:你使用了未定义的$var1和$var2变量,而连续的read命令会默认将输入覆盖到$REPLY中,导致第二次输入会冲掉第一次的内容。

修正后的重命名代码段

替换原脚本中"Rename a directory"对应的case分支为以下代码:

"Rename a directory")
    echo "What directory would you like to rename?"
    read old_dir
    # 检查原目录是否存在
    if [ ! -d "$old_dir" ]; then
        echo "Error: Directory '$old_dir' does not exist."
        continue
    fi
    echo "What would you like to rename it to?"
    read new_dir
    # 执行重命名,添加引号处理带空格的目录名
    mv "$old_dir" "$new_dir"
    echo "Directory renamed successfully from '$old_dir' to '$new_dir'."
    ;;

完整修正后的脚本

同时修复了其他小问题(如删除目录的拼写错误、补全列表目录功能):

PS3="Please enter the number of what you would like to do: " 
menu=("Create Directory" "Rename a directory" "Delete a Directory" "Change Directory" "List directories" "exit menu")  
select opt in "${menu[@]}"  
do
    case $opt in
        "Create Directory")
            echo "What do you want to call the directory?"
            read dir_name
            mkdir "$dir_name"
            echo "Directory '$dir_name' created successfully."
            ;;        
        "Rename a directory")
            echo "What directory would you like to rename?"
            read old_dir
            if [ ! -d "$old_dir" ]; then
                echo "Error: Directory '$old_dir' does not exist."
                continue
            fi
            echo "What would you like to rename it to?"
            read new_dir
            mv "$old_dir" "$new_dir"
            echo "Directory renamed successfully from '$old_dir' to '$new_dir'."
            ;;        
        "Delete a Directory")
            echo "What directory do you want to delete?"
            read del_dir
            if [ ! -d "$del_dir" ]; then
                echo "Error: Directory '$del_dir' does not exist."
                continue
            fi
            rmdir "$del_dir"
            echo "Directory '$del_dir' deleted successfully."
            ;;        
        "Change Directory")
            echo "What directory do you want to change to? "
            read cd_dir
            if [ ! -d "$cd_dir" ]; then
                echo "Error: Directory '$cd_dir' does not exist."
                continue
            fi
            cd "$cd_dir"
            echo "Changed to directory: $(pwd)"
            ;;        
        "List directories")
            echo "Current directories:"
            ls -d */  # 只列出目录
            ;; 
        
        "exit menu")
            echo "Exiting menu..."
            break
            ;;        
    esac 
done

关键修改点说明

  • 用明确的变量(old_dir、new_dir)存储两次用户输入,避免$REPLY被覆盖
  • 给所有目录名变量添加双引号"",支持带空格的目录名
  • 添加目录存在性检查,避免执行mv、rmdir、cd时出现无意义的错误
  • 补全了"List directories"分支的功能,用ls -d */只显示当前目录下的子目录

内容的提问来源于stack exchange,提问作者keeyoow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:20:41