当前位置: 首页 > news >正文

【Bash】记录一个长命令换行的BUG

假设现在我要在terminal执行如下命令跑模型:

CUDA_VISIBLE_DEVICES=6 python finetune.py -c configs/quantized/resnet32_cifar100_finetune.yml --model resnet32 --data-dir ~/datasets --apex-amp --initial-checkpoint /home/zwx/projects/hawq/resnet32.pth.tar --quant-firstlast --wq-per-channel

由于这个命令太长了,有这样一些问题:1. 改起来不方便,2. 没法存档,3. 不方便在之前命令的基础上修改后并行跑模型。

于是,很自然想到,把这个命令写在run.sh文件中,然后每次只需要如下命令就可以跑了:

bash ./run.sh

所以,这个长命令可以写成这样一个 带换行 的sh文件,可读性和可修改性高了很多:

CUDA_VISIBLE_DEVICES=6 python finetune.py -c \
configs/quantized/resnet32_cifar100_finetune.yml --model resnet32 \
--data-dir ~/datasets --apex-amp --initial-checkpoint /home/zwx/projects/hawq/resnet32.pth.tar \
--quant-firstlast --wq-per-channel

接下来,就是我踩坑的地方了!

  1. Bash中不要随意加注释!
    我在改命令时,做了这样一个修改(第3行中留了个之前路径的注释):
    CUDA_VISIBLE_DEVICES=6 python finetune.py -c \
    configs/quantized/resnet32_cifar100_finetune.yml --model resnet32 \
    --data-dir ~/datasets --apex-amp --initial-checkpoint /home/zwx/projects/hawq/resnet32.pth.tar \  # old file path
    --quant-firstlast --wq-per-channel
    
    于是,报错:识别不到最后一行的参数了。
  2. Bash中换行一定要在行末加换行符 \ !
    我在改命令时,做了这样一个修改(删掉了第3行末尾的换行符 \):
    CUDA_VISIBLE_DEVICES=6 python finetune.py -c \
    configs/quantized/resnet32_cifar100_finetune.yml --model resnet32 \
    --data-dir ~/datasets --apex-amp --initial-checkpoint /home/zwx/projects/hawq/resnet32.pth.tar
    --quant-firstlast --wq-per-channel
    
    于是,相当于最后一行参数就被独立出去了,也没法传进程序了。

当然,还有一种混合的错误写法(第3行既没有换行符 \,也多了注释):

CUDA_VISIBLE_DEVICES=6 python finetune.py -c \
configs/quantized/resnet32_cifar100_finetune.yml --model resnet32 \
--data-dir ~/datasets --apex-amp --initial-checkpoint /home/zwx/projects/hawq/resnet32.pth.tar # old file path
--quant-firstlast --wq-per-channel

显然错误!

最后,小结一句:在用bash写长命令时,可以分行,但是分行要带换行符 \,并且不要随意用注释,会导致后面的参数无法传入。实在不会的话,在bash里放不换行的长命令就行。

http://www.lryc.cn/news/207085.html

相关文章:

  • 【.net core】yisha框架imageupload组件多图上传修改
  • vscode markdown 使用技巧 -- 如何快速打出一个Tab 或多个空格
  • I/O 模型学习笔记【全面理解BIO/NIO/AIO】
  • 【Python学习笔记】字符编码
  • 华为昇腾NPU卡 大模型LLM ChatGLM2模型推理使用
  • Git 拉取远程更新报错
  • 腾讯云国际站服务器端口开放失败怎么办?
  • 一句话解释什么是出口IP
  • 深入理解强化学习——强化学习的历史:试错学习
  • 分享一个用HTML、CSS和jQuery构建的漂亮的登录注册界面
  • Java学习 习题 1.
  • 第六节——Vue中的事件
  • 设置GridView单选
  • [Python从零到壹] 七十二.图像识别及经典案例篇之OpenGL入门及绘制基本图形和3D图
  • 论文-分布式-并发控制-Lamport逻辑时钟
  • 长三角实现区块链电子医疗票据互联互通,蚂蚁链提供技术支持
  • Redis快速上手篇(三)(事务+Idea的连接和使用)
  • Spring三级缓存解决循环依赖问题
  • Unity 中使用波浪动画创建 UI 图像
  • 支付功能测试用例测试点?
  • HFS 快速搭建 http 服务器
  • 学生专用台灯怎么选?双十一专业学生护眼台灯推荐
  • Go 常用标准库之 fmt 介绍与基本使用
  • antv/x6 导出图片方法exportPNG
  • Decomposed Meta-Learning for Few-Shot Named Entity Recognition
  • C++经典面试题:内存泄露是什么?如何排查?
  • Hadoop+Hive+Spark+Hbase开发环境练习
  • 使用Spring Boot限制在一分钟内某个IP只能访问10次
  • ES 数据迁移最佳实践
  • C++中低级内存操作