Linux腳本的bom格式開頭
- 2020 年 4 月 2 日
- 筆記
最近在使用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//' {} ;
重新執行腳本,即可正常執行。