Linux腳本的bom格式開頭

最近在使用shell腳本處理問題的時候,發現腳本莫名其妙的報錯,腳本程式碼如下:

[hduser06@bdphdp010001 0.0.0]$ cat bom.sh  ?#!/bin/sh    echo 'start export data to sas'

    但是在vi該腳本的時候,卻發現:

#!/bin/sh    echo 'start export data to sas'

    該腳本是完全正常的,執行的時候報錯如下:

[hduser06@bdphdp010001 0.0.0]$ sh bom.sh  bom.sh: line 1: ?#!/bin/sh: No such file or directory  start export data to sas

    仔細觀察下,原來該腳本不小心帶了bom文件頭。檢查一個文件是否帶bom頭,可以如下檢查:

[hduser06@bdphdp010001 0.0.0]$ hexdump -C bom.sh | head  00000000  ef bb bf 23 21 2f 62 69  6e 2f 73 68 0a 0a 65 63  |...#!/bin/sh..ec|  00000010  68 6f 20 27 73 74 61 72  74 20 65 78 70 6f 72 74  |ho 'start export|  00000020  20 64 61 74 61 20 74 6f  20 73 61 73 27 0a 0a     | data to sas'..|  0000002f

    這裡可以看到bom.sh文件前頭有…,這個文件頭明顯是多餘的,這裡可以去掉。在windows下可以用notepad和UE都可以去掉。在Linux下,

可以使用如下命令,查出當前所有的帶bom的文件列表:

grep -r -I -l $'^xEFxBBxBF' ./

    去掉所有帶bom頭的文件:

find . -type f -exec sed -i 's/xEFxBBxBF//' {} ;

    重新執行腳本,即可正常執行。