Bash-script en /bin/bash^M: slechte interpreter: geen bestand of map [duplicaat]

Ik leer door deze tutorial om bash-scripts te leren om een ​​paar taken voor mij te automatiseren. Ik maak verbinding met een server met behulp van putty.

Het script, te vinden in .../Documents/LOG, is:

#!/bin/bash
# My first script
echo "Hello World!"

En ik heb het volgende uitgevoerd voor read/write/execute permissions

chmod 755 my_script

Als ik vervolgens ./my_script invoer, krijg ik de foutmelding in de titel.

Sommige soortgelijke vragen wilden deze graag zien, dus ik denk dat ze kunnen helpen:

which bash

/bin/bash

en

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/bin/mh

Ik heb geprobeerd de huidige map toe te voegen aan PATH, maar dat werkt niet..


Antwoord 1, autoriteit 100%

Ik heb dit probleem gezien bij het maken van scripts in Windows env en vervolgens overzetten naar een Unix-omgeving.

Probeer dos2unix uit te voeren op het script:

http://dos2unix.sourceforge.net/

Of herschrijf het script in uw Unix-env met vi en test.

Unix gebruikt verschillende regeleindes, dus kan het bestand dat u in Windows hebt gemaakt niet lezen. Daarom ziet het ^M als een illegaal karakter.

Als je een bestand op Windows wilt schrijven en vervolgens wilt overzetten, zorg er dan voor dat je editor is ingesteld om bestanden in UNIX-indeling te maken.

In notepad++ in de rechterbenedenhoek van het scherm wordt het documentformaat aangegeven. Standaard staat er Dos\Windows. Om het te veranderen ga naar

  • instellingen->voorkeuren
  • nieuw document / standaard directorytabblad
  • selecteer het formaat als unix en sluit
  • maak een nieuw document

Antwoord 2, autoriteit 94%

Voer het volgende commando uit in terminal

sed -i -e 's/\r$//' scriptname.sh

Probeer dan

./scriptname.sh

Het zou moeten werken.


Antwoord 3, autoriteit 20%

Als je Sublime Text op Windows of Mac gebruikt om je scripts te bewerken:

Klik op View > Line Endings > Unix en sla het bestand opnieuw op.

voer hier de afbeeldingsbeschrijving in


Antwoord 4, autoriteit 8%

Dit wordt veroorzaakt door het bewerken van bestanden in Windows en het importeren en uitvoeren in Unix.

dos2unix -k -o filename zou het lukken.


Antwoord 5, autoriteit 7%

In notepad++ kun je het specifiek voor het bestand instellen door op

. te drukken

Bewerken –> EOL-conversie –> UNIX/OSX-indeling

voer hier de afbeeldingsbeschrijving in


Antwoord 6, autoriteit 2%

probleem is met het einde van de dos-regel. Het volgende zal het voor unix converteren

dos2unix file_name

NB: u moet mogelijk eerst dos2unix installeren met yum install dos2unix

een andere manier om dit te doen, is door de opdracht sed te gebruiken om de tekens voor het einde van de dos-regel te zoeken en te vervangen in een unix-indeling:

$sed -i -e 's/\r$//' your_script.sh

Antwoord 7, autoriteit 2%

Je bestand heeft Windows-regeleindes, wat Linux verwarrend maakt.

Verwijder de valse CR-tekens. Je kunt het doen met het volgende commando:

 $ sed -i -e 's/\r$//' setup.sh

Antwoord 8

Voor gebruikers van Eclipse kunt u de bestandscodering rechtstreeks wijzigen vanuit het menu File > Convert Line Delimiters To > Unix (LF, \n, 0?, ¶):

Eclipse verander bestandscodering

Of verander het New text file line delimiter in Other: Unix op Window > Preferences > General > Workspace paneel:

Eclipse-werkruimte-instellingen


Antwoord 9

Ik heb het probleem kunnen oplossen door het script te openen in Gedit en het op te slaan met de juiste optie Line Ending:

Bestand > Opslaan als…

In de linkerbenedenhoek van de prompt Save As bevinden zich vervolgkeuzemenu’s voor tekencodering en regeleinde. Wijzig het regeleinde van Windows in Unix/Linux en sla op.

gedit


Antwoord 10

Atom heeft een ingebouwd selectiepakket voor regeleinden

Meer details hier: https://github.com/atom/line-ending-selector


Antwoord 11

Ik ontwikkel tegelijkertijd op Windows en Mac/Linux en ik vermijd deze ^M-fout door simpelweg mijn scripts uit te voeren zoals ik dat in Windows doe:

$ php ./my_script

Het is niet nodig om regeleindes te veranderen.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

eighteen + 19 =

Other episodes