Ik heb windows die Cygwin gebruiken en proberen JAVA_HOME
permanent in te stellen via mijn .bashrc
-bestand.
.bashrc:
export PATH="$JAVA_HOME/bin:$PATH"
export JAVA_HOME=$JAVA_HOME:"/cygdrive/c/Program Files (x86)/Java/jdk1.7.0_05"
.bash_profile:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
lopende cygwin:
-bash: $'\377\376if': command not found
-bash: $'then\r': command not found
: No such file or directorysu//.bashrc
-bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: syntax error near unexpected token `fi'
-bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: `fi'
Ik weet niet zeker of ik de commando’s heb overgenomen van een tutorial die bedoeld was voor een ander systeem of dat ik een stap mis. Of witruimte zorgt ervoor dat mijn opdrachten niet correct worden uitgevoerd.
Ik heb meerdere vergelijkbare vragen bekeken, maar ik heb er geen gevonden waarbij de vraag precies mijn fout bevat.
Mijn thuispad:
$ echo $HOME
/cygdrive/c/Users/jhsu
$ echo ~
/cygdrive/c/Users/jhsu/
Dus ik vind dat de bestanden op de juiste plek moeten worden geplaatst.
Antwoord 1, autoriteit 100%
Als al het andere faalt in Cygwin…
Probeer de opdracht dos2unix
uit te voeren op het betreffende bestand.
Het kan helpen als u foutmeldingen als deze ziet:
-bash: '\r': command not found
Nieuweregeltekens in Windows-stijl kunnen problemen veroorzaken in Cygwin.
De opdracht dos2unix
past nieuwe regeltekens aan zodat ze Unix / Cygwin-compatibel zijn.
VOORZICHTIG:het dos2unix-commando wijzigt bestanden op hun plaats, dus neem indien nodig voorzorgsmaatregelen.
Als u het originele bestand wilt bewaren, moet u er eerst een back-up van maken.
Opmerking voor Mac-gebruikers:de opdracht dos2unix
bestaat niet op Mac OS X.
Bekijk dit antwoordvoor verschillende oplossingen met verschillende tools.
Er is ook een unix2dos
commando dat het omgekeerde doet:
Het wijzigt Unix newline-tekens zodat ze compatibel zijn met Windows-tools.
Als je een bestand opent met Kladblok en alle regels lopen door elkaar, probeer dan unix2dos filename
.
Antwoord 2, autoriteit 76%
Voor degenen die dos2unixniet hebben geïnstalleerd (en het niet willen installeren):
Verwijder het laatste \r
teken dat deze fout veroorzaakt:
sed -i 's/\r$//' filename
Uitleg:
Optie -i
is voor in-placebewerking, we verwijderen de achterliggende \r
direct in het invoerbestand. Zorg er dus voor dat u het patroon correct typt.
Antwoord 3, autoriteit 25%
Voor WINDOWS(shell) gebruikers met Notepad++(gecontroleerd met v6. 8.3) kunt u het specifieke bestand corrigeren met de optie
– Bewerking
-> EOL-conversie
-> Unix/OSX-formaat
En sla je bestand opnieuw op.
Bewerken: werkt nog steeds in v7.5.1 (29 aug. 2017)
Antwoord 4, autoriteit 10%
Ik gebruik cygwin en Windows7, de truc was NIET om de set -o igncr
in je .bashrc te zetten, maar de hele SHELLOPTS
in je omgevingsvariabelen onder Windows . (Dus niets met unix / cygwin…) Ik denk dat het niet werkt vanuit .bashrc
omdat “de drops al gezogen zijn”
zoals we in het Duits zouden zeggen. 😉
Dus mijn SHELLOPTS
ziet er zo uit
braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor
Antwoord 5, autoriteit 8%
SUBLIEME TEKST
Bij subliem ga je gewoon naar
Bekijken – > Regeleinden -> (select)Unix
Sla het bestand vervolgens op. Zal dit probleem oplossen.
Zo simpel is het!
Antwoord 6, autoriteit 7%
Als je een recente Cygwin gebruikt (bijv. 1.7), kun je ook je .bashrc
en .bash_profile
starten met de volgende regel, op de eerste niet-becommentarieerde regel regel:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
(set -o igncr) 2>/dev/null && set -o igncr; # this comment is needed
Hierdoor wordt bash gedwongen de regelteruglooptekens (\r
) die worden gebruikt in regelscheidingstekens in Windows te negeren.
Zie http://cygwin.com/ml/cygwin-announce/2010-08/ msg00015.html.
Antwoord 7, autoriteit 5%
De fout:
'\r'
: opdracht niet gevonden
wordt veroorzaakt doordat shell niet in staat is om Windows-achtige CRLF-regeleindes te herkennen (0d 0a
) zoals het alleen LF
verwacht (0a
) .
Git
Als je Git op Windows gebruikt, zorg er dan voor dat je ‘Checkout as-is‘ hebt geselecteerd tijdens de installatie. Zorg er dan voor dat je het volgende uitvoert: git config --global core.autocrlf false
, zodat Git geen conversies zal uitvoeren bij het uitchecken of het vastleggen van tekstbestanden.
dos2unix
Als je Git niet gebruikt, hoef je alleen deze betrokken bestanden/scripts terug te converteren naar Unix-achtige regeleindes (LF), ofwel door:
dos2unix ~/.bashrc
Opmerking: de opdracht dos2unix
maakt deel uit van het pakket dos2unix
.
Ex/Vim-editor + tr
Als je Vim hebt geïnstalleerd, zou de volgende opdracht de bestanden moeten corrigeren:
ex +'bufdo! %! tr -d \\r' -scxa ~/.bash*
Handige alias: alias dos2unix="ex +'bufdo! %! tr -d \\\\r' -scxa"
.
tr
Hier is de methode met behulp van tr
:
cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc
of:
tr -d '\r' < filename > new_filename
Opmerking: de \r
is gelijk aan \015
.
sed
Je kunt het volgende commando proberen:
sed -i'.bak' s/\r//g ~/.bash*
recode
De volgende aliassen kunnen nuttig zijn (die de opdracht dos2unix
vervangen):
alias unix2dos='recode lat1:ibmpc'
alias dos2unix='recode ibmpc:lat1'
Bron: Gratis Unix-tools (ssh, bash, enz.) onder Windows.
perl
Het volgende perl
commando kan het bestand van DOS naar Unix formaat converteren:
perl -p -i.bak -e 's/\015//g' ~/.bash*
Bron: het strippen van de ^M.
tofrodos
Op Linux, zoals Ubuntu dat niet standaard wordt geleverd met dos2unix
of unix2dos
, kun je het tofrodos
-pakket installeren (sudo apt-get install tofrodos
), en definieer de volgende aliassen:
alias dos2unix=’fromdos’
alias unix2dos=’todos’
Gebruik vervolgens in dezelfde syntaxis als hierboven.
Zerver
Als je Vagrant VM gebruikt en dit gebeurt voor het inrichten van een script, probeer dan de binary
optie in te stellen op true
:
# Shell provisioner, see: https://www.vagrantup.com/docs/provisioning/shell.html
config.vm.provision "shell" do |s|
s.binary = true # Replace Windows line endings with Unix line endings.
s.path = "script.sh"
end
Zie: Windows CRLF naar Unix LF-problemen in Vagrant.
Antwoord 8, autoriteit 4%
Je kunt ook de optie -o igncr
toevoegen aan de bash-aanroep, bijvoorbeeld
bash -x -o igncr script.sh
Antwoord 9, autoriteit 4%
probeer de volgende opdracht uit te voeren
vim .bashrc
:set ff=unix
:wq!
Antwoord 10, autoriteit 2%
Volgens deze gistis de oplossing om een ~/.bash_profile
(in HOME
directory) die het volgende bevat:
export SHELLOPTS
set -o igncr
Antwoord 11, autoriteit 2%
Misschien heb je notepad++ gebruikt voor het maken/bijwerken van dit bestand.
EOL(Edit->EOL Conversion) Conversie is standaard Windows.
EOL-conversie wijzigen in Notepad++
Edit -> EOL Conversion -> Unix (LF)
Antwoord 12
Opgelost met Notepad++ :
1) Menu->Bewerken->EOL-conversie -> Unix/OSX-indeling
2) Dan Opslaan
Opgelost
Antwoord 13
mensen die notepad++(6.8.1) gebruiken om shellscripts van Windows naar Linux te verzenden.
stel het volgende in in kladblok ++
Bewerken -> EOL-conversie -> Unix/OSX-formaat
Antwoord 14
Ik had hetzelfde probleem. Oplossing: ik bewerk het bestand met de pspad-editor en geef het een unix-formaat (Menu – Format -> UNIX)
Ik geloof dat je dit formaat met veel andere editors voor je bestand kunt instellen
Antwoord 15
Voor de Emacs-gebruikers die er zijn:
- Open het bestand
- M-x set-buffer-file-coding-system
- Selecteer “unix”
Hiermee worden de nieuwe tekens in het bestand bijgewerkt naar Unix-stijl. Meer informatie over “Newline Representation” in Emacs vindt u hier:
http://ergoemacs.org/emacs/emacs_line_ending_char.html
Opmerking: de bovenstaande stappen kunnen worden omgezet in een Emacs-script als men dit liever vanaf de opdrachtregel uitvoert.
Antwoord 16
Het probleem is mogelijk ontstaan vanwege het bestand/script dat is gemaakt/gedownload van een Windows-computer. Probeer het te converteren naar het linux-bestandsformaat.
dos2unix ./script_name.sh
of
dos2unix ~/.bashrc
Antwoord 17
Als u het vim-pakket op uw Cygwin-installatie hebt geïnstalleerd, kunt u vim gebruiken om dit op te lossen zonder & vervangen. Start vim als volgt: vim filename.sh
(vaak is het ook een alias naar vi). Typ vervolgens :set fileformat=unix
en vervolgens :wq
(schrijf en stop) om uw wijzigingen op te slaan. (De :
zet je in de bewerkmodus van vim.)
Ik raad dit aan boven dos2unix omdat vim waarschijnlijk vaker wordt geïnstalleerd.
Het is echter waarschijnlijk een best practice om uw teksteditor in te stellen om bestanden die u van plan bent te gebruiken in een Unix/Linux-omgeving op te slaan in een Unix-tekstindeling. De bovenstaande antwoorden voor Notepad++ zijn een goed voorbeeld.
Aanvullende opmerking: als je niet zeker weet welk type een bestand is (DOS of Unix), kun je het file filename.sh
gebruiken. Dit kan vooral helpen bij het oplossen van meer obscure problemen (zoals coderingsproblemen bij het importeren van SQL-dumps die afkomstig zijn van Windows).
Meer achtergrondinformatie over Bash-scripts en regeleindes is te vinden op deze StackOverflow-vraag.
Antwoord 18
In EditPlusdoe je dit vanuit de
Document → File Format (CR/LF) → Change File Format...
menu en kies vervolgens het keuzerondje Unix / Mac OS X
.
Antwoord 19
1. Keuze
EditorConfig— is mijn keuze.
2. Relevantie
Dit antwoord is relevant voor maart 2018. In de toekomst kunnen de gegevens van dit antwoord verouderd zijn.
Auteur van dit antwoord gebruikte EditorConfig persoonlijk in maart 2018.
3. Beperkingen
Je moet een van de ondersteunde IDE/editorsgebruiken.
4. Argumentatie
- Gewoon gebruik. Ik moet mijn
.editorconfig
-bestand 1 keer instellen, waar ik mijn project maak, → ik kan enkele platform-, stijl- en IDE-specifieke problemen. - Cross-platform, cross-talen, cross-IDE, cross-editors.
5. Voorbeeld
5.1. Eenvoudig
Ik installeer EditorConfig-plug-invoor Sublime Text → mijn tekst editor. Ik bewerk bestanden in Sublime Text.
Ik heb bijvoorbeeld het bestand sashacrlf.sh
:
echo "Sasha" &
echo "Goddess!" &
Ik voer dit bestand uit in Cygwin:
$ bash sashacrlf.sh
Sasha
sashacrlf.sh: line 1: $'\r': command not found
Goddess!
Ik maak een bestand .editorconfig
aan in hetzelfde project als sashacrlf.sh
.
[*.sh]
end_of_line = lf
Het betekent dat als u een bestand met de extensie .sh
in uw project opslaat in uw editor, EditorConfig UNIX-regeleinden instelt voor dit bestand.
Ik sla sashacrlf.sh
opnieuw op in mijn teksteditor. Ik voer sashacrlf.sh
opnieuw uit:
$ bash sashacrlf.sh
Sasha
Goddess!
Ik krijg geen onverwachte uitvoer in de console.
5.2. Meerdere bestandsextensies
Ik wil bijvoorbeeld UNIX-regeleinden hebben in alle bestanden met de extensies .sh
, .bashrc
en .bash_profile
.
Ik voeg deze regels toe aan mijn .editorconfig
-bestand:
[*.{sh,bashrc,bash_profile}]
end_of_line = lf
Als ik nu een bestand opsla met de extensie .sh
, .bashrc
of .bash_profile
, stelt EditorConfig hier automatisch het UNIX-regeleinde voor in bestand.