Chạy tập lệnh được tạo trong Notepad (Windows) trên Ubuntu


14

Tôi đã tạo một tệp Notepad trên Windows và sao chép nó vào Ubuntu. Các tập tin có chứa một số quy tắc iptables. Sau khi làm cho tập tin thực thi bằng cách sử dụng chmod +xvà thực thi nó, nó không hoạt động.

Tuy nhiên, khi tôi tạo một tệp Ubuntu ( gedit ) và sao chép cùng một nội dung từ tệp Notepad, làm cho nó có thể thực thi được và chạy nó, nó đã hoạt động.

Tôi nên làm gì để làm cho tệp Notepad chạy trên Ubuntu?


Câu trả lời:


20

Windows và Linux có các ký hiệu cuối dòng khác nhau.

Bạn có thể cài đặt dos2unixtiện ích sửa nó:

sudo apt-get install dos2unix

Chạy theo cách này:

dos2unix -n winfile.txt linuxfile.txt

Ngoài ra còn có các unix2dostiện ích.

Việc chuyển đổi Windows sang Linux cũng có thể được thực hiện mà không cần cài đặt bất kỳ phần mềm đặc biệt nào bằng cách

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

Lưu ý: Các tập tin đầu vào và đầu ra phải khác nhau.

Một phiên bản sed sẽ chỉnh sửa tập tin "tại chỗ":

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

Hoặc ghi vào tập tin khác:

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

Lệnh của bạn sai. dos2unix winfile.txt linuxfile.txtcố gắng chuyển đổi cả hai tập tin. Sử dụng lệnh nàydos2unix -n winfile.txt linuxfile.txt
AB

@AB Đã sửa. Bạn đúng rồi. Họ đã thay đổi các tham số đầu vào. Tôi đã không sử dụng nó trong một thời gian dài.
Pilot6

Dù sao, câu trả lời tốt +1
AB

Cảm ơn tất cả các bạn rất nhiều. Vì tôi không có Notepad ++ và tôi không muốn cài đặt gói mới (dos2unix), tôi thích lệnh "tr" hơn. Tôi đã thử và nó đã hoạt động. Nhưng xin lưu ý rằng các tệp nguồn và đích phải khác nhau.
Albert

@Albert Đã thêm vào câu trả lời. Nó có thể được thực hiện theo một cách khác để giữ tên tệp, nhưng nó không đáng để IMHO nỗ lực. Và tốt hơn là nên có các tên khác nhau để không trộn lẫn các tập tin.
Pilot6

6

Trên Windows, bạn cần thay đổi định dạng Kết thúc dòng (EOL) trong Notepad ++ thành UNIX:

nhập mô tả hình ảnh ở đây

Bằng cách đó, nó cũng sẽ hoạt động trên Ubuntu.


1
Bằng cách đó, nó sẽ chỉ hoạt động trên Ubuntu / Linux. Mặc dù các trình soạn thảo nâng cao đặc biệt như Notepad ++ có thể nhận ra loại kết thúc dòng và hiển thị chính xác bằng mọi cách, nhưng notepad Windows bình thường, v.v.
Chỉ huy Byte

@ByteCommander CÓ, nhưng anh ấy muốn nó chạy trên Ubuntu.

1
Phải, tất nhiên. Tôi biết và nâng cao do đó. Tôi chỉ muốn làm cho sự thật này rõ ràng, để không ai sẽ ngạc nhiên khi tập tin bây giờ trông lạ trong notepad bình thường.
Chỉ huy Byte

2
Tôi nghĩ rằng OP đang đề cập đến chương trình Notepad tích hợp trong Windows, chứ không phải chương trình của bên thứ ba Notepad ++ . Nếu bạn đề xuất rằng Nodepad ++ nên được cài đặt trên Windows cho mục đích này, bạn có thể làm cho nó rõ ràng hơn trong câu trả lời của bạn không? Khi nó đứng ngay bây giờ, tôi nghĩ rằng nó là khó hiểu.
Peter Mortensen

@PeterMortensen Tôi đọc lại câu hỏi của anh ấy, tôi không nghĩ mình đã hiểu lầm và câu trả lời của tôi là một trong những giải pháp tốt cho vấn đề của anh ấy.

2

Windows sử dụng CR + LF để ngắt dòng. Trong Linux / Unix bạn cần có LF. Do đó, bạn phải thay CR + LF thành LF trong tập lệnh của mình:

Tải về dos2unix

sudo apt-get install dos2unix

Và sửa tập lệnh của bạn thông qua

dos2unix <your_script_file>

hoặc thông qua

dos2unix -n <your_script_file> <out_file>

nếu bạn cần một tập tin đầu ra khác

Thêm thông tin ở đây


từ 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

Tôi sử dụng cygwin trên Windows.
Mở tệp bằng vi. Sau đó nhập

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

sẽ lưu tệp với các ký tự cuối dòng Unix.


0

Bạn có thể sử dụng Vim trong chế độ Ex:

ex -bsc '%s/\r//|x' file
  1. % chọn tất cả các dòng

  2. s thay thế

  3. \r vận chuyển trở lại

  4. x lưu và đóng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.