Lösen Sie den R-Befehl, der auf Bash(oder Cygwin) nicht gefunden wurde

Olorunfemi Akinlua 15 Februar 2024
  1. Lösen Sie den bash: '\r': command not found mit Notepad++
  2. Lösen Sie bash: '\r': command not found mit dos2unix
  3. Lösen Sie bash: '\r': command not found mit sed
Lösen Sie den R-Befehl, der auf Bash(oder Cygwin) nicht gefunden wurde

Befehle können sich manchmal anders verhalten als erwartet, auch wenn man scheinbar alles richtig gemacht hat, wie das bei bash: '\r': command not found oder ähnlichen Fehlermeldungen wie syntax error near unexpected token $'\r'.

Wenn Sie solche Fehlermeldungen sehen, müssen Sie die Fehlermeldung verstehen. In diesem Fall muss es mit dem Carriage-Return-Zeichen \r umgehen, das das Terminal anweist, den Cursor an den Anfang der Zeile zu bewegen.

Dieser Artikel hilft Ihnen, die Fehlermeldung zu verstehen und zu beheben oder zu verhindern, dass sie erneut auftritt.

Lösen Sie den bash: '\r': command not found mit Notepad++

Verschiedene Betriebssysteme verhalten sich unterschiedlich, und Windows ist normalerweise das andere. Wie bereits erwähnt, ist das Vorhandensein des Zeichens \r die Ursache dieses Fehlers.

Das \r hat mit Zeilenumbrüchen zu tun, die unter verschiedenen Betriebssystemen unterschiedlich verwaltet werden.

Im Gegensatz zu Unix und modernen Macs verwendet Windows einen anderen Zeilenumbruchstil, der die Zeichenstile \n (LF - Line Feed) und \r (CR - Carriage Return) als Zeilenumbruchzeichen verwendet, und ältere Macs (macOS vor OS X ).

Unix, Linux und moderne Macs verwenden nur \n, um eine neue Zeile zu beginnen, was wichtig ist, wenn Terminals Text verarbeiten.

Wenn Sie also ein Windows-PC sind (auf dem wahrscheinlich Cygwin, Git Bash oder WSL2 - Windows Subsystem for Linux ausgeführt wird), enthält das Skript, das Sie auszuführen versuchen, höchstwahrscheinlich die CRLF-Zeichen (\r\n als Zeilenumbruchzeichen), die Sie möglicherweise im standardmäßigen Notepad-Editor unter Windows gesehen haben.

Windows-Notizblock

Mit diesem und der Möglichkeit, dass Sie das Skript oder die Datei, auf der Sie einen Befehl ausführen, mit einem Windows-basierten Editor erstellt haben, haben Sie Zeilenenden im Windows-Stil (oder CRLF) und müssen die CRLF-Zeichen entfernen.

Eine einfache Lösung könnte darin bestehen, mit einem Editor wie Notepad++ das Dateiformat auf das Unix-Zeichenformat LF zu ändern, sodass der folgende Befehl nicht angezeigt wird.

bash: '\r': command not found
syntax error near unexpected token `$'\r'
`fi

Öffnen Sie das Skript, mit dem Sie arbeiten, mit Notepad++ auf Ihrem Betriebssystem (Windows oder Macs) und ändern Sie das eingestellte Dateiformat, indem Sie auf die Registerkarte Windows (CR LF)/Macintosh (CR) doppelklicken und zu Unix (LF) wechseln.

notizblockpluspluss

Führen Sie danach denselben Befehl für das neu konfigurierte Skript aus, und Sie sollten keine Probleme haben.

Lassen Sie uns dieselben Probleme mit einer einfachen Skriptdatei nachbilden, die Folgendes enthält.

#!/bin/bash

echo "Testing the Carriage Return Character"
echo "Behavior"
echo "Wow! It works"

Die erwartete Ausgabe (ohne Fehler):

Testing the Carriage Return Character
Behavior
Wow! It works

Wir haben die Skriptdatei mit den standardmäßigen Endungen im Windows-Stil gespeichert, und das Ergebnis der Ausführung der Skriptdatei ist unten.

script.sh

Obwohl es immer noch die echo-Anweisungen ausgibt, gibt es uns das '\r': command not found. Speichern wir dieselbe Datei im Format Unix (LF).

Skript-Unix

Jetzt existiert die Fehlermeldung nicht.

Lösen Sie bash: '\r': command not found mit dos2unix

Wenn Sie sich im Terminal (oder Cygwin Terminal) befinden, möchten Sie wahrscheinlich nicht zu einem Texteditor gehen, um einige Änderungen am Zeilenende vorzunehmen. Hier kommt dos2unix mit unserem bash: '\r': command not found-Problem ins Spiel.

Mit dos2unix können Sie Ihre Dateien – Klartext in Skripte – im DOS- (Windows) oder Mac-Format Zeilenumbrüche in UNIX-Format-Zeilenumbrüche umwandeln.

Ein einfacher dos2unix-Befehl auf unserer script.sh löst unsere Fehlermeldungen.

dos2unix.exe script.sh

Möglicherweise erhalten Sie einen Befehl nicht gefunden, insbesondere wenn Sie sich auf Cygwin Terminal unter Windows befinden und das Paket nicht installiert haben.

Linux wird mit den meisten typischen Distributionen geliefert, aber wenn Sie es nicht haben, können Sie den folgenden Befehl verwenden oder folgen Sie der Installationsanleitung.

sudo apt install tofrodos

Um dos2unix auf macOS zu installieren, können Sie MacPorts installieren und dann den folgenden Befehl verwenden oder der Installationsanleitung über Brew folgen.

sudo port install dos2unix

Um auf Cygwin zu installieren, müssen Sie auf die Installationsdatei klicken, um Ihre bestehende Installation zu aktualisieren. Danach sollten Sie den Bildschirm Pakete auswählen und eine Suchleiste sehen.

Pakete auswählen

Suchen Sie mit der Suchleiste nach dos2unix und doppelklicken Sie auf den Wert skip (und Sie sollten eine Versionsnummer sehen). Klicken Sie anschliessend auf Weiter und schließen Sie die Installation ab.

Lassen Sie uns nun den Befehl dos2unix im Skript ausprobieren.

dos2unix

Wie Sie sehen können, ändert der Befehl die Datei script.sh in das Unix-Format, wie in der Befehlsausgabe angegeben, und wenn wir dasselbe Skript ausführen, ist die Fehlermeldung nicht mehr vorhanden.

dos2unix: converting file script.sh to Unix format...

Lösen Sie bash: '\r': command not found mit sed

sed ist ein Unix-Dienstprogramm, das uns hilft, Text zu parsen und umzuwandeln, der über Linux-Terminals, einschließlich Cygwin, verfügbar ist. Damit können wir das abschließende \r-Zeichen herausfiltern, ohne dass unser Skript Probleme verursacht.

Der folgende Befehl kann helfen, das Zeichen \r zu entfernen und die Fehlermeldung zu beseitigen, die bei der Verwendung einiger RegEx-Ausdrücke und des Dienstprogramms auftritt.

sed -i 's/\r$//' script.sh

In Ihrem Fall können Sie die [script.sh] durch den Dateinamen ersetzen.

Lassen Sie uns den Befehl sed in unserem Skript script.sh im CRLF-Stil ausprobieren.

sed

Jetzt sind wir frei von dem $ '\r': command not found.

Mit diesen drei Alternativen können Sie dem Problem ganz einfach vorbeugen, indem Sie Ihre Skriptdateien beim Arbeiten im Unix (LF)-Format abspeichern. Wenn es sich jedoch um etwas handelt, das wir verhindern können, und es sich lediglich um eine Datei handelt, auf die wir zufällig Zugriff haben, können wir die Befehle dos2unix oder sed verwenden, um den Fehler zu beheben.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Verwandter Artikel - Bash Cygwin

Verwandter Artikel - Bash Error