假設現(xiàn)在我要在terminal執(zhí)行如下命令跑模型:
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
接下來,就是我踩坑的地方了!
- Bash中不要隨意加注釋!
我在改命令時,做了這樣一個修改(第3行中留了個之前路徑的注釋):
于是,報錯:識別不到最后一行的參數(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 \ # old file path --quant-firstlast --wq-per-channel
- Bash中換行一定要在行末加換行符 \ !
我在改命令時,做了這樣一個修改(刪掉了第3行末尾的換行符 \):
于是,相當于最后一行參數(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
當然,還有一種混合的錯誤寫法(第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
顯然錯誤!文章來源:http://www.zghlxwxcb.cn/news/detail-719877.html
最后,小結一句:在用bash寫長命令時,可以分行,但是分行要帶換行符 \,并且不要隨意用注釋,會導致后面的參數(shù)無法傳入。實在不會的話,在bash里放不換行的長命令就行。文章來源地址http://www.zghlxwxcb.cn/news/detail-719877.html
到了這里,關于【Bash】記錄一個長命令換行的BUG的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!