sh script editen in windows

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik zelf windows 7 waarmee ik een ubuntu server beheer. Ik gebruik putty en winscp om met de server te communiceren.

Nu heb ik de hele tijd een vaag probleem waarvan ik nu vermoed dat het te maken heeft met het feit dat ik op windows zit. Als ik een .sh script dat op de server staat download met winscp, vervolgens op mijn windows mbv notepad++ ga editen, en daarna weer upload dan werkt het soms ineens niet meer. Zelfs als ik totaal geen wijzigingen in het script aanbreng, lijkt het ineens kapot te zijn.

Ik krijg dan syntax errors, terwijl de syntax eigenlijk OK is. Bijv ik krijg:
code:
1
Syntax error: end of file unexpected (expecting "then")


terwijl er een perfecte if then fi statement staat. Zou het kunnen zijn dat mijn windows client iets met de encoding van de file doet, waardoor de file beschadigd wordt? Ik heb wel eens vaker problemen met \n en \r\n gehad, maar als ik de files mbv nano bekijk op de server lijken ze eigenlijk gewoon OK.

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Sla je hem wel in het UNIX (in plaats van DOS) formaat op dan? Ik werk nooit met nano, dus bekijk de file even met vi(m). Als het een DOS-formaat is, zie je overal ^M achter de regels staan. (dat is niet (meer) zo).

Als het DOS-formaat is, zie je na het openen in Nano deze tekst onderin staan: "[ Read x lines (Converted from DOS format) ]". In VI(M) zie je "[dos]" achter de bestandsnaam staan bij het openen.

[ Voor 87% gewijzigd door Room42 op 22-08-2010 18:08 ]

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • matel
  • Registratie: Februari 2004
  • Laatst online: 10-01 23:25
Altijd binair uploaden/downloaden en niet vergeten de UNIX opmaak aan te zetten :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb EOL conversion op UNIX gezet. Zou het wat uitmaken of ENCODING op ANSI of UTF-8 staat?

[ Voor 24% gewijzigd door Verwijderd op 22-08-2010 18:26 ]


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 18:14

MartinMeijerink

Computerrorist

Als je het niet-meer-werkende script met hexdump bekijkt:
hexdump -C script.sh

wat zie je dan?
Een stukje tekst als dit:
code:
1
2
regel1
regel2

moet er dan zo uit zien:
code:
1
72 65 67 65 6c 31 0a 72  65 67 65 6c 32 0a       regel1.r egel2.

En dus niet zo:
code:
1
72 65 67 65 6c 31 0d 0a  72 65 67 65 6c 32 0d 0a regel1.. regel2..


Windows zet nl. CarriageReturn (0d) en LineFeed (0a) achter elke regel, en in linux gebruiken we alleen LineFeed.


Maar wat Windows ook nog weleens doet is er 3 bytes voor zetten, om aan te geven dat het UTF-8 is:
code:
1
2
ef bb bf 72 65 67 65 6c  31 0a 72 65 67 65 6c 32 ...regel 1.regel2
0a                                               .


Als je kan kiezen tussen UTF-8 of ANSI, dan dus ANSI kiezen.

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

Verwijderd

is het niet zo dat er op elke regel een "^M" aan het eind staat?

Dan zou je dat kunnen weghalen met ":%s/^m/ /g" in vi.

Acties:
  • 0 Henk 'm!

  • 0xDEADBEEF
  • Registratie: December 2003
  • Niet online
Verwijderd schreef op zondag 22 augustus 2010 @ 18:24:
Ik heb EOL conversion op UNIX gezet.
In notepad++: Edit > EOL Conversion > Convert to UNIX Format. aka Bewerken > Formaat > Unix-indeling
Zou het wat uitmaken of ENCODING op ANSI of UTF-8 staat?
Probeer het script opnieuw uit te voeren als je het, in notepad++, opgeslagen hebt als ANSI in een UNIX-indeling. Als ik C-code (bedoeld voor GCC) open met notepad++ is de file met die indeling geopend.

[ Voor 90% gewijzigd door 0xDEADBEEF op 22-08-2010 22:54 ]

"Religion is an insult to human dignity. With or without it you would have good people doing good things and evil people doing evil things. But for good people to do evil things, that takes religion." - Steven Weinberg


Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

Je kan ook het script na het bewerken en uploaden even door dos2unix laten converteren.

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 19:49
0xDEADBEEF schreef op zondag 22 augustus 2010 @ 22:36:
[...]


In notepad++: Edit > EOL Conversion > Convert to UNIX Format. aka Bewerken > Formaat > Unix-indeling


[...]

Probeer het script opnieuw uit te voeren als je het, in notepad++, opgeslagen hebt als ANSI in een UNIX-indeling. Als ik C-code (bedoeld voor GCC) open met notepad++ is de file met die indeling geopend.
Zolang je alleen ASCII-tekens gebruikt, is er geen verschil tussen ANSI of UTF-8. :)
Rainmaker schreef op maandag 23 augustus 2010 @ 01:46:
Je kan ook het script na het bewerken en uploaden even door dos2unix laten converteren.
Om preciezer te zijn:
code:
1
fromdos <naam bestand>
Het pakket heet tofrodos op Ubuntu.

[ Voor 21% gewijzigd door Jaap-Jan op 23-08-2010 02:07 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OK het bleek dus uiteindelijk inderdaad om de EOL te gaan. Als die niet goed staat werken je sh scripts (uiteraard) niet meer.
Pagina: 1