' for reading (没有那个文件或目录)en file `
001、奇怪的报错:' for reading (没有那个文件或目录)en file `
[sy20223040796@admin1 test]$ ls ## 测试文件及命令 test.bed test.sh [sy20223040796@admin1 test]$ cat test.bed ## 测试文件 1 5400001 5400002 1 5425001 5425002 1 8150001 8150002 1 17350001 17350002 [sy20223040796@admin1 test]$ cat test.sh ## 测试命令 awk 'BEGIN {chrom_map["1"] = "NC_056054.1"} {chrom = $1; rest = $2 "\t" $3; if (chrom in chrom_map) { print chrom_map[chrom], "\t" rest}}' test.bed [sy20223040796@admin1 test]$ bash test.sh ## 出现如下的报错 NC_056054.1 5400001 5400002 NC_056054.1 5425001 5425002 NC_056054.1 8150001 8150002 NC_056054.1 17350001 17350002 ' for reading (没有那个文件或目录)en file `
。
002、测试,问题原因
[sy20223040796@admin1 test]$ ls test.bed test.sh [sy20223040796@admin1 test]$ cp test.sh test2.sh ## 错误脚本复制一份 [sy20223040796@admin1 test]$ dos2unix test2.sh ## 将test2.sh转换 为linux格式 dos2unix: converting file test2.sh to Unix format ... [sy20223040796@admin1 test]$ cat -A test.sh ## 查看详细格式 awk 'BEGIN {chrom_map["1"] = "NC_056054.1"} {chrom = $1; rest = $2 "\t" $3; if (chrom in chrom_map) { print chrom_map[chrom], "\t" rest}}' test.bed ^M$ [sy20223040796@admin1 test]$ cat -A test2.sh ## 查看详细格式 awk 'BEGIN {chrom_map["1"] = "NC_056054.1"} {chrom = $1; rest = $2 "\t" $3; if (chrom in chrom_map) { print chrom_map[chrom], "\t" rest}}' test.bed $ [sy20223040796@admin1 test]$ bash test.sh ## 测试原始脚本, 有报错 NC_056054.1 5400001 5400002 NC_056054.1 5425001 5425002 NC_056054.1 8150001 8150002 NC_056054.1 17350001 17350002 ' for reading (没有那个文件或目录)en file ` [sy20223040796@admin1 test]$ bash test2.sh ## 测试修改后脚本呢, 无报错 NC_056054.1 5400001 5400002 NC_056054.1 5425001 5425002 NC_056054.1 8150001 8150002 NC_056054.1 17350001 17350002
。
出现 ' for reading (没有那个文件或目录)en file `报错是因为shell脚本末尾多出了windows中的 ^M后缀, 在linux 中不兼容导致的。