web-dev-qa-db-ja.com

'\ r':コマンドが見つかりません - .bashrc / .bash_profile

Cygwinを使用して、Java_HOMEファイルを介して.bashrcを永続的に設定しようとしているウィンドウがあります。

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

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'

他のシステム向けのチュートリアルからコマンドを受け取ったのか、ステップが足りないのかわかりません。または空白があると、コマンドが正しく実行されません。

私は似たような質問を複数見ましたが、質問に間違いがある質問を見つけたことはありません。


私のホームパス:

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

だから私はファイルが正しい場所に配置されるべきだと思います。

235
Jasmine

Cygwinで他のすべてが失敗した場合...

問題のファイルに対してdos2unixコマンドを実行してみてください。

このようなエラーメッセージが表示されたときに役立ちます。

-bash: '\r': command not found

Windowsスタイルの改行文字はCygwinで問題を引き起こす可能性があります。

dos2unixコマンドは改行文字を修正してUnix/Cygwin互換にします。

注意:dos2unixコマンドはファイルをその場で変更しますので、必要に応じて注意してください。

元のファイルを保持する必要がある場合は、最初にそれをバックアップする必要があります。

Macユーザーへの注意:dos2unixコマンドはMac OS Xには存在しません。

さまざまなツールを使用したさまざまな解決策については、 this answer を確認してください。


その逆を行うunix2dosコマンドもあります。

Windowsのツールと互換性があるようにUnixの改行文字を変更します。

メモ帳でファイルを開き、すべての行が一緒に実行される場合は、unix2dos filenameを試してください。

307
jahroy

dos2unixをインストールしていない(そしてインストールしたくない)人のために:

このエラーの原因となっている末尾の\r文字を削除します。

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


説明

オプション-iは、インプレース編集用です。入力ファイルの末尾の\rを直接削除します。そのため、パターンを正しく入力するように注意してください。

178

私はcygwinとWindows7を使っています。トリックはset -o igncrをあなたの.bashrcに入れるのではなく、SHELLOPTS全体をあなたの環境変数に入れることでした。私たちがドイツ語で言うように「滴は既に吸い込まれている」ので、私はそれが.bashrcからうまくいかないと思います。 ;-)だから私のSHELLOPTSはこんな感じです

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

WINDOWSユーザーが Notepad ++ (v6.8.3でチェック済み)を使用している場合、特定のファイルを修正できますオプションを使う - 編集 - > EOL変換 - > Unix/OSXフォーマット

そしてファイルをもう一度保存してください。

編集:まだv7.5.1で動作します(2017年8月29日)

37
Ray Oei

最近のCygwin(1.7など)を使用している場合は、.bashrc.bash_profileの両方を次の行(コメントアウトされていない最初の行)から開始することもできます。

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

これにより、bashはWindowsの行区切り文字で使用されるキャリッジリターン(\r)文字を無視します。

http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html を参照してください。

26
user1461760

サブテキスト

崇高であなたはただ行く

表示 - >行末 - >(選択)Unix

それからファイルを保存します。この問題を修正します。

それは簡単!

21
Alvaro Joao

Bash呼び出しにオプション-o igncrを追加することもできます。

bash -x -o igncr script.sh
17
user1010997

エラー:

'\r':コマンドが見つかりません

これはShellがWindowsのようなCRLF行末(0d 0a)を認識できないためです。これはLF0a)のみを想定しているためです。


Git

WindowsでGitを使用している場合は、セットアップ中に 'チェックアウトをそのまま'を選択したことを確認してください。それから、必ずgit config --global core.autocrlf falseを実行してください。そうすれば、Gitはテキストファイルをチェックアウトまたはコミットするときに変換を実行しません。


dos2unix

Gitを使用していない場合は、次のいずれかの方法で、影響を受けるファイル/スクリプトをUnix風のLF(Line End)に戻す必要があります。

dos2unix ~/.bashrc

注:dos2unixコマンドはdos2unixパッケージの一部です。

元/ Vimエディタ+ tr

Vimがインストールされていれば、次のコマンドでファイルを修正するはずです。

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

便利なエイリアス:alias dos2unix="ex +'bufdo! %! tr -d \\\\r' -scxa"

tr

これはtrを使用した方法です。

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

または

tr -d '\r' < filename > new_filename

注:\r\015と同等です。


sed

次のコマンドを試すことができます。

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

recode

次のエイリアスが便利です(dos2unixコマンドに代わるもの)。

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

出典: Windows下の無料Unixツール(ssh、bashなど)


Perl

次のPerlコマンドは、ファイルをDOSからUnix形式に変換できます。

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

出典: ^ Mを削除


tofrodos

Linuxでは、Ubuntuのようにdos2unixunix2dosも標準とはなっていません。tofrodosパッケージ(Sudo apt-get install tofrodos)をインストールして、次のエイリアスを定義することができます。

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

それから上記と同じ構文で使用してください。


浮浪者

Vagrant VMを使用していて、これがプロビジョニングスクリプトで発生する場合は、binaryオプションを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

UnixへのWindows CRLF LF Vagrantにおける問題

12
kenorb

次のコマンドを実行してみてください

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

この 要旨 に従って、解決策は以下を含む~/.bash_profileを(HOMEディレクトリに)作成することです。

export SHELLOPTS
set -o igncr
7
Jesse Chisholm

メモ帳++(6.8.1)を使用してシェルスクリプトをWindowsからLinuxに配布している人。

メモ帳++編集 - > EOL変換 - > Unix/OSXフォーマットで以下を設定します。

3
viru

Notepad ++で解決されました:

1)メニュー - >編集 - > EOL変換 - > Unix/OSXフォーマット

2)保存

一定

3

私は同じ問題を抱えていました。解決策:私はpspadエディタでファイルを編集し、それにunixフォーマットを与えます(メニュー - フォーマット - > UNIX)。

私はあなたが他の多くのエディタであなたのファイルにこのフォーマットを設定できると信じています

2
israel

Emacsユーザーのために:

  1. ファイルを開く
  2. M-xセットバッファファイルコーディングシステム
  3. "unix"を選択

これにより、ファイル内の新しい文字がUNIXスタイルに更新されます。 Emacsの "Newline Representation"に関するより詳しい情報はここにあります:

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

注意:コマンドラインから実行することを好むのであれば、上記のステップをEmacsスクリプトにすることができます。

2
user2548343

1.選択

EditorConfig EditorConfig - 私の選択です。


2.関連性

この答えは2018年3月に関連しています。将来、この答えからのデータは時代遅れになるかもしれません。

この回答の作者は2018年3月に個人的にEditorConfigを使用しました。


制限事項

サポートされているIDE/editors のいずれかを使う必要があります。


4.議論

  1. 使い方だけ。プロジェクトを作成する.editorconfigファイルを1回設定する必要があります。→忘れてもいいです プラットフォーム、スタイル、IDE固有の問題 .
  2. クロスプラットフォーム、クロスランゲージ、クロスIDE、クロスエディタ

5.例

5.1。単純な

Sublime Text→私のテキストエディタのために EditorConfigプラグイン をインストールします。 Sublime Textでファイルを編集します。

例えば、私はsashacrlf.shファイルを持っています:

echo "Sasha" &
echo "Goddess!" &

私はCygwinでこのファイルを実行します。

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

.editorconfigと同じプロジェクトでファイルsashacrlf.shを作成します。

[*.sh]
end_of_line = lf

つまり、エディタのプロジェクトに拡張子.shを付けてファイルを保存すると、EditorConfigはこのファイルのUNIXの行末を設定します。

テキストエディタでsashacrlf.shをもう一度保存します。 sashacrlf.shをもう一度実行します。

$ bash sashacrlf.sh
Sasha
Goddess!

コンソールに予期しない出力が表示されません。

5.2。複数のファイル拡張子

たとえば、拡張子が.sh.bashrc、および.bash_profileのすべてのファイルにUNIXの行末を付けたいとします。これらの行を.editorconfigファイルに追加します。

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

さて、拡張子が.sh.bashrc、または.bash_profileのファイルを保存すると、EditorConfigは自動的にこのファイルのUNIX行末を設定します。


追加リンク

このファイルの作成と更新にnotepad ++を使ったのかもしれません。

EOL(編集 - > EOL変換)デフォルトの変換はWindowsです。

Notepad ++でEOL変換を変更する

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

EditPlus では、Document → File Format (CR/LF) → Change File Format...メニューからこれを行い、次にUnix / Mac OS Xラジオボタンを選択します。

0
Danny Schoemann

Cygwinのインストールにvimパッケージがインストールされている場合は、検索と置換を行わなくてもvimを使用してこれを修正できます。次のようにvimを起動します。vim filename.sh(多くの場合、viにもエイリアスされています)。次に、:set fileformat=unixを入力してから:wq(write&quit)を入力して、変更内容を保存します。 (:はあなたをvimの編集モードにします。)

Vimはおそらくもっと一般的にインストールされているのでdos2unixよりもこれをお勧めします。

ただし、Unix/Linux環境で使用する予定のファイルをUnixテキスト形式に保存するようにテキストエディタを設定することをお勧めします。メモ帳++についての上記の回答は良い例です。

追加の注意:ファイルの種類(DOSまたはUnix)がわからない場合は、file filename.shを使用できます。これは、より不明瞭な問題(WindowsからのSQLダンプをインポートするときのエンコードの問題など)のデバッグに特に役立ちます。

テキストファイルのフォーマットを変更する方法に関する他のオプションについては、 このIUのナレッジベース記事

Bashスクリプトと行末の詳細な背景情報は このStackOverflowの質問 にあります。

0
Evan Donovan

Windowsマシンから作成/ダウンロードされたファイル/スクリプトが原因で、問題が発生した可能性があります。 linuxファイル形式に変換してみてください。

dos2unix ./script_name.sh

または

dos2unix ~/.bashrc
0
Walk