จริงๆ ปัญหาเรื่อง CTRL-M (^M) มันมีนานมากแล้วนะ เพราะเวลาโยนไฟล์ข้าม จาก Windows > Linux เพราะ
- Windows ตัว carriage return character (CR+LF)
- Linux ตัว carriage return character (LF)
ตัวอย่างปัญหา
อย่าง Blog ผมเองมีจดไว้ตอนฝึกงานโน้นเลย แต่พอดีว่าเจอปัญหานี้อีกรอบ ตอน Setup Server ใหม่ เลยมาเขียน Recap หน่อย เพราะมันอารมณ์ผีหลอกจริงๆ เช่น
- No such file or directory
ตัวอย่างนี้ มันบอกว่าหา path ไม่เจอ
sh: /usr/bonanza/interface/script/inf3sys /template/op_configure.sh: No such file or directory /usr/bonanza/interface/script/inf3sys/invsbch_opintf.ksh[5]: /usr/bonanza/interface/log/inf3sys /inv_extrasecurity.opgenlog: cannot create [No such file or directory] /usr/bonanza/interface/script/inf3sys/invsbch_opintf.ksh[6]: /usr/bonanza/inter
แต่ถ้าลองไล่จาก Script ลอง echo มันจะออกได้ปกติ อย่างเคสผม Korn Shell เดิม มันจะ มันจะถูกดึงจากไฟล์ properties มาใส่ตัวแปร $scriptPath แล้วที่นี้
- ลอง echo $scriptPath ดูปกตินะ
- ลองเรียกตรงๆ Error ซะงั้น $scriptPath
No such file or directory/script/inf3sys
หลังจากไล่ไปสักพัก เจอสาเหตุแล้ว ลองตรวจด้วยคำสั่ง cat -v <PathToFile>
จะพบ ^M
cat -v config.properties #Sun Jun 20 16:50:21 ICT 2021^M logpath=/usr/bonanza/interface/log/inf3sys^M FILEFOLDER=/usr/bonanza/interface/temp/cbs/^M auth=true^M #sftppath=/INVS/Interface/FromINVS^M sftppath=/home/invsbch/inf3sys^M password=06E04166E99688CB14EFF93B44A2D9E1E5AAEA9749D803D1BDC71A511265F7DB^M #sftpserver=192.168.1.^M #sftpserver=128.1.0.18^M sftpserver=192.168.1.212^M cbspath=/CBS/Interface/ToINVS^M prefixSubject=^M
- Private Key ใช้ไม่ได้
ถ้าลอง ssh แล้วเจออะไรแปลกๆ ก็ลอง cat -v มาดูนะ จะเจอ ^M
-----BEGIN OPENSSH PRIVATE KEY-----^M b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn^M NhAAAAAwEAAQAAAgEAvkF1QyUuaaMYm7jHQ7fOUSa4msnQXd7Uxezp/xymj7xHNXB04dTd^M .. 3IPz1DD+If3yF9AccsQlzyJ4hcl5IGO49Vdk7PS8qqhvYt2KgHHvqrQlWMjjO6hE1BHyD7^M nJW4ujt0dxonfkX7mdrkqN70f9XcpgRIvLw4qzcPpL26yUIROs30Pcz6f+Z6KrNjmZHbNW^M 2UoILiQAkKoBAAAAEXJvb3RAaW52c2RldmFwcDAxAQ==^M -----END OPENSSH PRIVATE KEY-----^M
การแก้ไข
บน Linux
- ใช้ dos2unix
dos2unix filename
- ใช้ sed
sed -e "s/\r//g" file > newfile
บน Windows สามารถใชั Tools อย่าง Notepad++ ได้ โดยไปที่ menu Edit -> EOL Conversion -> และเลือกที่ต้องการได้เลย
![](https://i0.wp.com/naiwaen.debuggingsoft.com/blog/wp-content/uploads/2025/02/notepad_0SERvRe8Ii.webp?resize=886%2C532&ssl=1)
จบไปและ จดไว้ เผื่อให้ Google / AI มาช่วยหาในอนาคต
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.