Jetson Nano中复制Shell脚本内容生成文件异常的排查
复制Shell脚本内容后出现“目录未找到”错误的排查与解决
额外字节的来源
最常见的原因是换行符格式差异:原脚本A.sh是Linux系统的LF(\n)换行,而你通过编辑器复制粘贴后,新文件B.sh被转换成了Windows风格的CRLF(\r\n)换行。每个换行多了一个\r字节,866-857=9字节的差值,刚好对应9个换行位置多出来的\r字符。
这些额外的\r会被Shell当成路径的一部分,比如原本的./target_dir会变成./target_dir\r,系统自然找不到这个带特殊字符的目录,从而抛出“目录未找到”错误。
修复方法
- 使用
dos2unix工具转换格式:
这个命令会直接将文件中的CRLF换行替换为LF,转换后文件大小应该和原脚本一致。dos2unix B.sh - 在编辑器中手动设置换行格式:
大多数编辑器(如VS Code、Vim)都支持切换换行符类型。比如在VS Code右下角点击当前换行符标识(显示“CRLF”),选择“LF”后保存;Vim中可以执行:set fileformat=unix再执行:w保存。 - 用
sed命令批量去除\r字符:
这个命令会删除每行末尾的sed -i 's/\r$//' B.sh\r字符,快速修复换行符问题。
其他可能的原因
- 不可见字符或额外空格:复制粘贴时可能不小心带入了编辑器界面的空白区域、或者粘贴后编辑器自动添加了多余空格,导致脚本中的路径、命令参数出现无效字符,引发错误。可以用
cat -A B.sh查看文件中的不可见字符,对比cat -A A.sh找出差异。 - UTF-8 BOM头:部分编辑器保存文件时会自动添加UTF-8 BOM头(3个字节的
EF BB BF),这会导致脚本的Shebang行(#!/bin/bash)被破坏,系统无法正确识别脚本解释器,间接引发类似路径错误的异常。可以用hexdump -C B.sh | head查看文件开头是否有BOM字节。 - 编辑器自动格式化:如果编辑器开启了自动格式化功能,可能会修改脚本中的缩进、空格甚至路径字符串(比如把长路径换行拆分),导致脚本逻辑出错。
内容的提问来源于stack exchange,提问作者Vishesh Varma
相关产品推荐
相关产品推荐

