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

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

bash 复制代码
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 复制代码
bash ./run.sh

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

bash 复制代码
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行中留了个之前路径的注释):

    bash 复制代码
    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行末尾的换行符 \):

    bash 复制代码
    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行既没有换行符 \,也多了注释):

bash 复制代码
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里放不换行的长命令就行。

相关推荐
TeYiToKu22 分钟前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
dsywws24 分钟前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
yeyuningzi33 分钟前
Debian 12环境里部署nginx步骤记录
linux·运维·服务器
上辈子杀猪这辈子学IT1 小时前
【Zookeeper集群搭建】安装zookeeper、zookeeper集群配置、zookeeper启动与关闭、zookeeper的shell命令操作
linux·hadoop·zookeeper·centos·debian
minihuabei1 小时前
linux centos 安装redis
linux·redis·centos
王哈哈^_^1 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
是瑶瑶子啦1 小时前
【深度学习】论文笔记:空间变换网络(Spatial Transformer Networks)
论文阅读·人工智能·深度学习·视觉检测·空间变换
lldhsds2 小时前
书生大模型实战营第四期-入门岛-1. Linux前置基础
linux
wowocpp2 小时前
ubuntu 22.04 硬件配置 查看 显卡
linux·运维·ubuntu
山河君2 小时前
ubuntu使用DeepSpeech进行语音识别(包含交叉编译)
linux·ubuntu·语音识别