web-gelistirme-sc.com

'\ r': komut bulunamadı - .bashrc / .bash_profile

Cygwin kullanarak, Java_HOME dosyasını .bashrc dosyam yoluyla kalıcı olarak ayarlamaya çalışan pencerelerim var.

. Bashrc'de:

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

çalışan 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'

Komutları başka bir sistem için düşünülmüş bir öğreticiden aldım mı yoksa bir adım attığımdan emin değilim. Veya boşluk, komutlarımın düzgün çalışmamasına neden oluyor.

Birden çok benzer soruya baktım ancak sorunun tam olarak benim hatam olduğu yeri bulamadım.


Ana yolum:

$ echo $HOME
/cygdrive/c/Users/jhsu
$ echo ~
/cygdrive/c/Users/jhsu/

Bu yüzden dosyaların doğru noktaya yerleştirilmesi gerektiğine inanıyorum.

235
Jasmine

Cygwin'de diğerleri başarısız olduğunda ...

Söz konusu dosyada dos2unix komutunu çalıştırmayı deneyin.

Bunun gibi hata mesajları gördüğünüzde yardımcı olabilir:

-bash: '\r': command not found

Windows tarzı yeni satır karakterleri Cygwin'de sorunlara neden olabilir.

dos2unix komutu, yeni satır karakterlerini Unix/Cygwin uyumlu olacak şekilde değiştirir.

DİKKAT: dos2unix komutu dosyaları yerinde değiştirir, bu nedenle gerekirse önlem alın.

Orijinal dosyayı saklamanız gerekiyorsa, önce yedeklemelisiniz.

Mac kullanıcıları için not: dos2unix komutu, Mac OS X'te yoktur.

Check out this answer farklı araçlar kullanarak çeşitli çözümler için.


Tersini yapan bir unix2dos komutu da vardır:

Unix newline karakterlerini değiştirir, böylece Windows araçlarıyla uyumludurlar.

Not Defteri ile bir dosya açarsanız ve tüm satırlar birlikte çalışırsa, unix2dos filename dosyasını deneyin.

307
jahroy

Yüklü olmayanlar için dos2unix (ve yüklemek istemiyorsanız):

Bu hataya neden olan takip eden \r karakterini kaldırın:

sed -i 's/\r$//' filename


açıklaması:

Seçenek -i yerinde yerinde düzenlemek içindir, sonunda \r giriş dosyasını doğrudan sileriz. Bu nedenle deseni doğru yazmaya dikkat edin.

178

Cygwin ve Windows7 kullanıyorum, püf noktası set -o igncr dosyasını .bashrc dosyasına koymak değil, SHELLOPTS öğesinin tamamını Windows altındaki ortam değişkenlerine koymak değildi. (Yani unix/cygwin ile hiçbir şey ...) Sanırım .bashrc 'dan işe yaramadı çünkü “damlalar zaten emildi”, çünkü Almancada söylediğimiz gibi. ;-) Yani benim SHELLOPTS bu gibi görünüyor

braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor
37

WINDOWSNotepad ++ (v6.8.3 ile kontrol edilir) kullanan kullanıcılar için, seçeneği kullanarak belirli bir dosyayı düzeltebilirsiniz. -> EOL dönüşümü -> Unix/OSX formatı

Ve dosyanızı tekrar kaydedin.

Düzenleme: hala v7.5.1'de çalışır (29 Ağustos 2017)

37
Ray Oei

Yeni bir Cygwin kullanıyorsanız (ör. 1.7), ilk yorum yapmayan satırda hem .bashrc hem de .bash_profile'nuzu aşağıdaki satırla başlatabilirsiniz:

# ~/.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

Bu, bash'ı Windows satır ayırıcılarında kullanılan satırbaşı (\r) karakterlerini yoksaymaya zorlar.

Bakınız http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html .

26
user1461760

SUBLIME TEXT

Yüce ile sadece gitmek

Görünüm -> Satır Sonları -> (seç) Unix

Ardından dosyayı kaydedin. Bu sorunu çözecektir.

Bu kadar kolay!

21
Alvaro Joao

Ayrıca, bass çağrısına -o igncr seçeneğini de ekleyebilirsiniz;.

bash -x -o igncr script.sh
17
user1010997

Hata:

'\r': komut bulunamadı

shell, yalnızca LF(0d 0a) beklediği için Windows benzeri CRLF satır sonlarını (0a) tanıyamadı.


Git

Git’i Windows’ta kullanıyorsanız, kurulum sırasında ’ Olduğu gibi kontrol et 'seçeneğini seçin. Ardından çalıştırdığınızdan emin olun: git config --global core.autocrlf false, bu nedenle Git metin dosyalarını teslim alırken veya işlerken herhangi bir dönüşüm gerçekleştirmez.


dos2unix

Git'i kullanmıyorsanız, etkilenen bu dosyaları/komut dosyalarını Unix benzeri satır sonlarına (LF) dönüştürmeniz yeterlidir:

dos2unix ~/.bashrc

Not: dos2unix komutu, dos2unix paketinin bir parçasıdır.

Ex/Vim editor + trname__

Vim yüklediyseniz, aşağıdaki komut dosyaları düzeltmelidir:

ex +'bufdo! %! tr -d \\r' -scxa ~/.bash*

Kullanışlı takma ad: alias dos2unix="ex +'bufdo! %! tr -d \\\\r' -scxa".

trname__

İşte trkullanarak yöntem:

cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc

veya:

tr -d '\r' < filename > new_filename

Not: \r, \015 işlevine eşittir.


sedname__

Aşağıdaki komutu deneyebilirsiniz:

sed -i'.bak' s/\r//g ~/.bash*

recodename__

Aşağıdaki takma adlar yararlı olabilir (bu dos2unix komutunun yerine geçer):

alias unix2dos='recode lat1:ibmpc'
alias dos2unix='recode ibmpc:lat1'

Kaynak: Windows altında Ücretsiz Unix Araçları (ssh, bash, vb. .


Perlname__

Aşağıdaki Perlkomutu, dosyayı DOS'tan Unix biçimine dönüştürebilir:

Perl -p -i.bak -e 's/\015//g' ~/.bash*

Kaynak: ^ M sıyırma .


tofrodosname__

Linux'ta, dos2unix veya unix2dos ile standart olarak gelmeyen Ubuntu gibi, tofrodospaketini (Sudo apt-get install tofrodos) yükleyebilir ve aşağıdaki takma adları tanımlayabilirsiniz:

alias dos2unix=’fromdos’
alias unix2dos=’todos’

Sonra yukarıdaki ile aynı sözdiziminde kullanın.


Serseri

Vagrant VM kullanıyorsanız ve bu komut dosyası hazırlama işleminde gerçekleşiyorsa, binaryseçeneğini trueolarak ayarlamayı deneyin:

# 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

Bakınız: Windows CRLF - Unix LF Vagrant'taki sorunlar .

12
kenorb

aşağıdaki komutu yürütmeyi deneyin

vim .bashrc
:set ff=unix
:wq!
8
U_2647

Buna göre Gist , çözüm aşağıdakileri içeren bir ~/.bash_profile (HOME dizininde) oluşturmaktır:

export SHELLOPTS
set -o igncr
7
Jesse Chisholm

shell scriptlerini pencerelerden linux'a göndermek için notepad ++ (6.8.1) kullananlar.

aşağıdakileri not defterinde ayarlayın ++ Edit -> EOL Conversion -> Unix/OSX formatı

3
viru

Notepad ++ ile çözüldü:

1) Menü-> Düzenle-> EOL Dönüşüm -> Unix/OSX Biçimi

2) Sonra Kaydet

Sabit

3

Ben de aynı problemi yaşadım. Çözüm: Dosyayı pspad editörüyle düzenliyorum ve unix bir format veriyorum (Menü - Format -> UNIX)

Diğer birçok editörle bu formatı dosyanıza ayarlayabileceğinizi düşünüyorum.

2
israel

Dışarıdaki Emacs kullanıcıları için:

  1. Dosyayı aç
  2. M-x set-tampon-dosya-kodlama sistemi
  3. "Unix" i seçin

Bu, dosyadaki yeni karakterleri unix stilinde günceller. Emacs'ta "Newline Temsilciliği" hakkında daha fazla bilgiyi burada bulabilirsiniz:

http://ergoemacs.org/emacs/emacs_line_ending_char.html

Not: Bunu komut satırından yürütmeyi tercih etmesi durumunda, yukarıdaki adımlar bir Emacs komut dosyasına yapılabilir.

2
user2548343

1. Seçim

EditorConfig EditorConfig - benim tercihim.


2. Alaka Düzeyi

Bu cevap Mart 2018 için geçerlidir. Gelecekte, bu cevaptaki veriler eski olabilir.

Bu cevabın yazarı şahsen Mart 2018'de EditorConfig'ü kullandı.


3. Sınırlamalar

Desteklenen IDE/editörlerinden birini kullanmanız gerekir .


4. Tartışma

  1. Basitçe kullanım. Projemi oluşturduğum .editorconfig dosyamı 1 kez ayarlamam gerekiyor, → unutabilirim bazı platform, stil ve IDE'ye özgü sorunları .
  2. Çapraz platform, çapraz dil, çapraz IDE, çapraz düzenleyici .

5. Örnek

5.1. Basit

Ben yüklüyorum EditorConfig eklentisi Yüce Metin → metin editörüm. Sublime Metindeki dosyaları düzenlerim.

Örneğin, sashacrlf.sh dosyam var:

echo "Sasha" &
echo "Goddess!" &

Bu dosyayı Cygwin'de çalıştırıyorum:

$ bash sashacrlf.sh
Sasha
sashacrlf.sh: line 1: $'\r': command not found
Goddess!

.editorconfig ile aynı projedeki sashacrlf.sh bir dosya oluşturdum.

[*.sh]
end_of_line = lf

Projenizde .sh uzantılı herhangi bir dosyayı editörünüze kaydederseniz, EditorConfig bu dosya için UNIX satır sonlarını ayarladı demektir.

Metin editörüme sashacrlf.sh tekrar kaydederim. sashacrlf.sh komutunu tekrar çalıştırdım:

$ bash sashacrlf.sh
Sasha
Goddess!

Konsolda beklenmedik bir çıkış elde edemiyorum.

5.2. Birden çok dosya uzantısı

Örneğin, UNIX satır sonlarının .sh, .bashrc ve .bash_profile uzantısına sahip tüm dosyalarda olmasını istiyorum. Bu satırları .editorconfig dosyama ekliyorum:

[*.{sh,bashrc,bash_profile}]
end_of_line = lf

Şimdi, .sh, .bashrc veya .bash_profile uzantılı herhangi bir dosyayı kaydedersem, EditorConfig bu dosya için biten UNIX satırını otomatik olarak ayarlar.


6. Ek bağlantılar

Bu dosyayı oluşturmak/güncellemek için not defteri ++ kullanmış olabilirsiniz.

EOL (Düzenle-> EOL Dönüştürme) Dönüştürme varsayılan olarak Windows'dur.

Not Defteri ++'da EOL Dönüşümünü Değiştirin

Edit -> EOL Conversion -> Unix (LF)
0
Faiz Ahmed

EditPlus içinde bunu Document → File Format (CR/LF) → Change File Format... menüsünden yapın ve ardından Unix / Mac OS X radyo düğmesini seçin.

0
Danny Schoemann

Cygwin kurulumunuza takılı bir vim paketi varsa, bul ve değiştir yapmadan bunu düzeltmek için vim kullanabilirsiniz. Vim'i aşağıdaki gibi başlatın: vim filename.sh (genellikle vi'ye diğer adı da eklenir). Ardından, değişikliklerinizi kaydetmek için :set fileformat=unix, ardından :wq (write & quit) yazın. (:, sizi vim'in düzenleme moduna geçirir.)

Vim muhtemelen daha sık yüklü olduğundan bu dos2unix üzerinde tavsiye ederim.

Ancak, metin düzenleyicinizi bir Unix/Linux ortamında kullanmayı planladığınız dosyaları bir Unix metin biçiminde kaydedecek şekilde ayarlamak muhtemelen en iyi yöntemdir. Yukarıda Notepad ++ için verilen cevaplar iyi bir örnektir.

Ek not: Ne tür bir dosya olduğundan emin değilseniz (DOS veya Unix), file filename.sh öğesini kullanabilirsiniz. Bu, özellikle daha belirsiz olan sorunların (Windows'tan gelen SQL dökümlerini içe aktarırken kodlama gibi) hata ayıklamasında yardımcı olabilir.

Metin dosyası formatının nasıl değiştirileceğine ilişkin diğer seçenekler için, bakınız bu IU bilgi tabanı makalesi

Bash komut dosyaları ve satır sonları hakkında daha fazla arka plan bilgisi bu StackOverflow sorus 'da bulunur.

0
Evan Donovan

Sorun, bir Windows makinesinden oluşturulan/indirilen dosya/komut dosyası nedeniyle ortaya çıkabilir. Lütfen linux dosya formatına dönüştürmeyi deneyin.

dos2unix ./script_name.sh

veya

dos2unix ~/.bashrc
0
Walk