ใช้งานสคริปต์ที่สร้างใน Notepad (Windows) บน Ubuntu


14

ฉันสร้างไฟล์ Notepad บน Windows และคัดลอกไปยัง Ubuntu ไฟล์มีกฎ iptables หลังจากทำให้ไฟล์ที่เรียกทำงานได้โดยใช้chmod +xและดำเนินการแล้วจะไม่ทำงาน

อย่างไรก็ตามเมื่อฉันสร้างไฟล์ Ubuntu ( gedit ) และคัดลอกเนื้อหาเดียวกันจากไฟล์ Notepad ทำให้มันสามารถเรียกใช้และรันได้มันทำงานได้

ฉันควรทำอย่างไรเพื่อให้ไฟล์ Notepad ทำงานบน Ubuntu


คำตอบ:


20

Windows และ Linux มีสัญลักษณ์สิ้นสุดบรรทัดที่แตกต่างกัน

คุณสามารถติดตั้งdos2unixยูทิลิตี้ที่แก้ไขได้:

sudo apt-get install dos2unix

ใช้วิธีนี้:

dos2unix -n winfile.txt linuxfile.txt

นอกจากนี้ยังมีunix2dosยูทิลิตี้

การแปลง Windows เป็น Linux สามารถทำได้โดยไม่ต้องติดตั้งซอฟต์แวร์พิเศษใด ๆ ด้วย

 tr -d '\r' < winfile.txt > linuxfile.txt

หมายเหตุ: ไฟล์อินพุตและเอาต์พุตต้องแตกต่างกัน

sedรุ่นจะแก้ไขไฟล์ "ในสถานที่"

 sed  -i 's/\r//g' file.txt

หรือเขียนไปยังไฟล์อื่น:

 sed 's/\r//g' winfile.txt > linuxfile.txt

คำสั่งของคุณผิด dos2unix winfile.txt linuxfile.txtพยายามแปลงทั้งสองไฟล์ ใช้คำสั่งนี้dos2unix -n winfile.txt linuxfile.txt
AB

@AB คงที่ คุณพูดถูก พวกเขาเปลี่ยนพารามิเตอร์อินพุต ฉันไม่ได้ใช้มันเป็นเวลานาน
Pilot6

อย่างไรก็ตามคำตอบที่ดี +1
AB

ขอบคุณมาก ๆ เนื่องจากฉันไม่มี Notepad ++ และฉันไม่ต้องการติดตั้งแพ็กเกจใหม่ (dos2unix) ฉันชอบคำสั่ง "tr" ฉันลองแล้วใช้งานได้ แต่โปรดทราบว่าไฟล์ต้นทางและปลายทางจะต้องแตกต่างกัน
อัลเบิร์ต

@Albert เพิ่มคำตอบแล้ว สามารถทำได้อีกวิธีหนึ่งในการเก็บชื่อไฟล์ แต่ไม่คุ้มค่ากับความพยายามของ IMHO และจะเป็นการดีกว่าถ้ามีชื่อที่แตกต่างกัน
Pilot6

6

บน Windows คุณต้องเปลี่ยนรูปแบบ End of Line (EOL) ใน Notepad ++ เป็น UNIX:

ป้อนคำอธิบายรูปภาพที่นี่

วิธีนี้จะทำงานบน Ubuntu ด้วย


1
วิธีการที่มันจะทำงานเฉพาะบน Ubuntu / ลินุกซ์ ในขณะที่บรรณาธิการขั้นสูงพิเศษเช่น Notepad ++ อาจรู้จักชนิดของการสิ้นสุดบรรทัดและแสดงอย่างถูกต้องอย่างไรก็ตาม notepad ปกติของ Windows และอื่น ๆ
ผู้บัญชาการ Byte

@ ByteCommander YES แต่เขาต้องการให้มันทำงานบน Ubuntu

1
ใช่แน่นอน ฉันรู้และ upvoted ดังนั้น ฉันแค่ต้องการทำให้ความจริงนี้ชัดเจนดังนั้นไม่มีใครจะประหลาดใจเมื่อไฟล์ดูแปลกใน notepad ปกติ
ผู้บัญชาการไบต์

2
ฉันคิดว่า OP อ้างถึงโปรแกรม Notepadในตัวใน Windows ไม่ใช่โปรแกรมNotepad ++ ของ บริษัทอื่น หากคุณแนะนำว่าควรติดตั้ง Nodepad ++ บน Windows เพื่อจุดประสงค์นี้คุณสามารถทำให้ชัดเจนขึ้นในคำตอบของคุณหรือไม่ ฉันคิดว่ามันทำให้เกิดความสับสน
Peter Mortensen

@ PeterMortensen ฉันอ่านคำถามของเขาอีกครั้งฉันไม่คิดว่าฉันเข้าใจผิดและคำตอบของฉันเป็นหนึ่งในวิธีแก้ไขปัญหาที่ดีของเขา

2

Windows ใช้ CR + LF สำหรับการขึ้นบรรทัดใหม่ ใน Linux / Unix คุณต้องการ LF ดังนั้นคุณต้องแทนที่ CR + LF เป็น LF ในสคริปต์ของคุณ:

ติดตั้ง dos2unix

sudo apt-get install dos2unix

และแก้ไขสคริปต์ของคุณผ่าน

dos2unix <your_script_file>

หรือผ่าน

dos2unix -n <your_script_file> <out_file>

หากคุณต้องการไฟล์เอาต์พุตอื่น

ข้อมูลเพิ่มเติมที่นี่


จาก man dos2unix

NAME
       dos2unix - DOS/Mac to Unix and vice versa text file format converter

SYNOPSIS
           dos2unix [options] [FILE ...] [-n INFILE OUTFILE ...]
           unix2dos [options] [FILE ...] [-n INFILE OUTFILE ...]

1

ฉันใช้ cygwin บน Windows
เปิดไฟล์ด้วย vi จากนั้นใส่

:set ff=unix<enter> followed by 
:wq<enter> 

จะบันทึกไฟล์ด้วยตัวอักษร Unix ท้ายบรรทัด


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.