Exécution d'un script créé dans le Bloc-notes (Windows) sur Ubuntu

14

J'ai créé un fichier Bloc-notes sur Windows et l'ai copié sur Ubuntu. Le fichier contient quelques règles iptables. Après avoir rendu le fichier exécutable en l'utilisant chmod +xet en l'exécutant, cela n'a pas fonctionné.

Cependant, lorsque j'ai créé un fichier Ubuntu ( gedit ) et copié le même contenu à partir du fichier Bloc-notes , l'ai rendu exécutable et l' ai exécuté, cela a fonctionné.

Que dois-je faire pour exécuter le fichier Bloc-notes sur Ubuntu?

Albert
la source

Réponses:

20

Windows et Linux ont des symboles de fin de ligne différents.

Vous pouvez installer l' dos2unixutilitaire qui le corrige:

sudo apt-get install dos2unix

Exécutez-le de cette façon:

dos2unix -n winfile.txt linuxfile.txt

Il y a aussi l' unix2dosutilitaire.

La conversion Windows vers Linux peut également être effectuée sans installer de logiciel spécial en

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

Remarque: les fichiers d'entrée et de sortie doivent être différents.

Une version sed éditera le fichier "en place":

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

Ou écrivez dans un autre fichier:

 sed 's/\r//g' winfile.txt > linuxfile.txt
Pilot6
la source
Votre commande est fausse. dos2unix winfile.txt linuxfile.txtessaie de convertir les deux fichiers. Utilisez cette commandedos2unix -n winfile.txt linuxfile.txt
AB
@AB Fixed. Tu as raison. Ils ont changé les paramètres d'entrée. Je ne l'ai pas utilisé depuis longtemps.
Pilot6
Quoi qu'il en soit, bonne réponse +1
AB
Merci beaucoup à tous. Comme je n'ai pas Notepad ++ et que je ne voulais pas installer un nouveau paquet (dos2unix), j'ai préféré la commande "tr". Je l'ai essayé et cela a fonctionné. Mais veuillez noter que les fichiers source et de destination doivent être différents.
Albert
@Albert Ajouté à la réponse. Il peut être fait une autre façon de conserver le nom de fichier, mais cela ne vaut pas l'effort à mon humble avis. Et il vaut mieux avoir des noms différents de toute façon pour ne pas mélanger les fichiers.
Pilot6
6

Sous Windows, vous devez modifier le format de fin de ligne (EOL) dans Notepad ++ en UNIX:

entrez la description de l'image ici

De cette façon, cela fonctionnera également sur Ubuntu.


la source
1
De cette façon, cela ne fonctionnera que sur Ubuntu / Linux. Alors que des éditeurs avancés spéciaux comme Notepad ++ peuvent reconnaître le type de fin de ligne et l'afficher correctement de toute façon, le bloc-notes Windows normal, etc. ne le fera pas.
Byte Commander
@ByteCommander OUI, mais il veut le faire fonctionner sur Ubuntu.
1
Oui bien sûr. Je connais et j'ai donc voté positivement. Je voulais juste clarifier ce fait, afin que personne ne soit surpris lorsque le fichier semble maintenant étrange dans le bloc-notes normal.
Byte Commander
2
Je pense que l'OP fait référence au programme intégré Notepad dans Windows, pas au programme tiers Notepad ++ . Si vous proposez que Nodepad ++ soit installé sur Windows à cet effet, pouvez-vous le rendre plus explicite dans votre réponse? À l'heure actuelle, je pense que cela prête à confusion.
Peter Mortensen
@PeterMortensen J'ai relu sa question, je ne pense pas avoir mal compris et ma réponse est l'une des bonnes solutions à son problème.
2

Windows utilise CR + LF pour les sauts de ligne. Sous Linux / Unix, vous avez besoin de LF. Par conséquent, vous devez remplacer CR + LF en LF dans votre script:

Installer dos2unix

sudo apt-get install dos2unix

Et corrigez votre script via

dos2unix <your_script_file>

ou via

dos2unix -n <your_script_file> <out_file>

si vous avez besoin d'un fichier de sortie différent

Plus d'informations ici


de 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 ...]
UN B
la source
1

J'utilise cygwin sur Windows.
Ouvrez le fichier avec vi. Entrez ensuite

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

enregistrera le fichier avec les caractères de fin de ligne Unix.

Russell McDonell
la source
0

Vous pouvez utiliser Vim en mode Ex:

ex -bsc '%s/\r//|x' file
  1. % sélectionner toutes les lignes

  2. s remplacer

  3. \r retour chariot

  4. x sauver et fermer

Steven Penny
la source