Even een post van een Linux n00b, er zullen er nog wel meer volgen als gevolg van mijn leertraject met de Raspberry Pi. Als je Windows gebruiker bent, dan weet je wellicht nog wat Batchbestanden zijn/waren. Je kunt er commando’s mee uitvoeren, programma’s mee opstarten etc.
Bash is binnen Linux de omgeving die vergelijkbaar is met de commandoprompt van Windows. En zoals je Batchbestanden kunt maken, kun je ook Bash-scripts maken. Even niet over me heel vallen als ik daarmee Bash tekort doe, het punt is dat ik met scripts te maken kreeg toen ik een cronjob wilde maken om automatisch elke vijf minuten de waarden van de omvormer uit te lezen en te uploaden. Dat had ik natuurlijk met nano op de Raspberry Pi zelf kunnen doen, maar ik deed het met Notepad++ op mijn Windows machine.
Maar na het uploaden van het bestand naar de Raspberry Pi, wilde het script niet runnen. Ik kreeg een vage "/bin/bash^M: bad interpreter: No such file or directory"
foutmelding.
Wat blijkt, zelfs met tekstbestanden kun je problemen krijgen in een gemengde Windows-Linux omgeving. Het bestand werd voor Linux verkeerd opgeslagen. In Notepad++ kun je er (gelukkig) voor kiezen om het bestand met UNIX-indeling opslaan waarna het probleem verholpen is. Zie ook de schermafbeelding hierboven. Je kiest voor Bewerken > Formaat > UNIX-indeling
.
Het alternatief is om het bestand te repareren door sed -i 's/\r//' bestandnaam
in te typen vanaf de Linux machine, waarbij je de bestandsnaam (uiteraard) vervangt door de naam van het Bash-script.
Vast heel logisch, maar het is maar even iets wat je moet weten.
Linux Bash bestanden aanmaken op een Windows computer: Even een post van een Linux n00b, er zullen er nog wel m… http://t.co/0IlaHQCU
Je kunt ook het tooltje dos2unix gebruiken om een dergelijk bestand te converteren. Uiteraard bestaat unix2dos ook 😉
Notepad++ heeft geen problemen met de bestanden als ze in UNIX-formaat zijn, dus unix2dos heb ik niet nodig. En dos2unix is dan weer een apart tooltje dat ik zou moeten installeren op de Raspberry Pi alleen voor dit doel.