Menjalankan skrip yang dibuat di Notepad (Windows) di Ubuntu

14

Saya membuat file Notepad di Windows dan menyalinnya ke Ubuntu. File ini berisi beberapa aturan iptables. Setelah membuat file dapat dieksekusi menggunakan chmod +xdan mengeksekusinya, itu tidak berfungsi.

Namun, ketika saya membuat file Ubuntu ( gedit ) dan menyalin konten yang sama dari file Notepad, membuatnya dapat dieksekusi dan menjalankannya, itu berhasil.

Apa yang harus saya lakukan untuk membuat file Notepad berjalan di Ubuntu?

Albert
sumber

Jawaban:

20

Windows dan Linux memiliki simbol end-of-line yang berbeda.

Anda dapat menginstal dos2unixutilitas yang memperbaikinya:

sudo apt-get install dos2unix

Jalankan dengan cara ini:

dos2unix -n winfile.txt linuxfile.txt

Ada juga unix2dosutilitasnya.

Konversi Windows-ke-Linux juga dapat dilakukan tanpa menginstal perangkat lunak khusus apa pun oleh

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

Catatan: File input dan output harus berbeda.

Versi sed akan mengedit file "di tempat":

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

Atau tulis ke file lain:

 sed 's/\r//g' winfile.txt > linuxfile.txt
Pilot6
sumber
Perintahmu salah. dos2unix winfile.txt linuxfile.txtmencoba mengonversi kedua file. Gunakan perintah inidos2unix -n winfile.txt linuxfile.txt
AB
@ AB Diperbaiki. Kamu benar. Mereka mengubah parameter input. Saya tidak menggunakannya untuk waktu yang lama.
Pilot6
Pokoknya, jawab yang baik +1
AB
Terima kasih banyak. Karena saya tidak punya Notepad ++ dan saya tidak ingin menginstal paket baru (dos2unix), saya lebih suka perintah "tr". Saya mencobanya dan berhasil. Tetapi harap dicatat bahwa file sumber dan tujuan harus berbeda.
Albert
@Albert Ditambahkan ke jawabannya. Hal ini dapat dilakukan dengan cara lain untuk menjaga nama file, tetapi tidak sepadan dengan upaya IMHO. Dan lebih baik memiliki nama yang berbeda pula untuk tidak mencampur file.
Pilot6
6

Di Windows, Anda perlu mengubah format End of Line (EOL) di Notepad ++ ke UNIX:

masukkan deskripsi gambar di sini

Dengan begitu itu akan bekerja di Ubuntu juga.


sumber
1
Dengan begitu itu hanya akan berfungsi di Ubuntu / Linux. Sementara editor tingkat lanjut khusus seperti Notepad ++ mungkin mengenali tipe akhir baris dan menampilkannya dengan benar, notepad Windows normal dll tidak.
Byte Commander
@ByteCommander YA, tapi dia ingin menjalankannya di Ubuntu.
1
Ya tentu saja. Karena itu saya tahu dan terangkat. Saya hanya ingin membuat fakta ini jelas, sehingga tidak ada yang akan terkejut ketika file sekarang terlihat aneh di notepad normal.
Byte Commander
2
Saya pikir OP mengacu pada program bawaan Notepad di Windows, bukan program pihak ketiga Notepad ++ . Jika Anda menyarankan bahwa Nodepad ++ harus diinstal pada Windows untuk tujuan ini, dapatkah Anda membuatnya lebih eksplisit dalam jawaban Anda? Seperti berdiri sekarang, saya pikir itu membingungkan.
Peter Mortensen
@PeterMortensen Saya membaca lagi pertanyaannya, saya tidak berpikir saya salah paham dan jawaban saya adalah salah satu solusi yang bagus untuk masalahnya.
2

Windows menggunakan CR + LF untuk jeda baris. Di Linux / Unix Anda membutuhkan LF. Karena itu Anda harus mengganti CR + LF ke LF di skrip Anda:

Install dos2unix

sudo apt-get install dos2unix

Dan perbaiki skrip Anda melalui

dos2unix <your_script_file>

atau via

dos2unix -n <your_script_file> <out_file>

jika Anda memerlukan file output yang berbeda

Informasi lebih lanjut di sini


dari 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 ...]
AB
sumber
1

Saya menggunakan cygwin di Windows.
Buka file dengan vi. Lalu masuk

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

akan menyimpan file dengan karakter Unix akhir baris.

Russell McDonell
sumber
0

Anda dapat menggunakan Vim dalam mode Ex:

ex -bsc '%s/\r//|x' file
  1. % pilih semua baris

  2. s pengganti

  3. \r Kereta kembali

  4. x Simpan dan tutup

Steven Penny
sumber