340

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/

したがって、ファイルは正しい場所に配置する必要があると思います。

4

19 に答える 19

408

Cygwinで他のすべてが失敗したとき...

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

次のようなエラーメッセージが表示された場合に役立つことがあります。

-bash: '\r': command not found

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

このdos2unixコマンドは、Unix/Cygwinと互換性があるように改行文字を変更します。

注意: dos2unixコマンドは、所定の場所にあるファイルを変更するため、必要に応じて注意してください。

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

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

さまざまなツールを使用したさまざまなソリューションについては、この回答を確認してください。


unix2dos逆のコマンドもあります。

Unixの改行文字を変更して、Windowsツールと互換性を持たせます。

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

于 2012-07-23T17:10:35.583 に答える
336

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

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

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


説明

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

于 2015-10-02T17:42:35.523 に答える
119

Notepad ++ ( v6.8.3でチェック済み)を使用しているWINDOWS(シェル)ユーザーの場合、オプションを使用して特定のファイルを修正できます。

  • 編集->EOL変換->Unix/OSX形式

そして、ファイルをもう一度保存します。

編集:v7.5.1でも引き続き機能します(2017年8月29日)

編集:2022年1月3日VSCode。何度か言及されているように。VSCodeの設定に移動files.eolし、検索フィールドに入力して\n(Unix形式)に設定します。これにより、すべてのファイルのユーザーまたはワークスペースでこれが変更され、希望どおりにならない場合があることに注意してください。YMMV。

于 2015-10-06T15:15:22.223 に答える
39

私はcygwinとWindows7を使用していますが、トリックはset -o igncr.bashrcに入れるのではなく、SHELLOPTSWindowsの環境変数に全体を入れることでした。.bashrc(つまり、unix / cygwinでは何もありません...)ドイツ語で言うように、「ドロップはすでに吸い込まれている」ため、機能しないと思います。;-)だから私のようにSHELLOPTS見える

braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor
于 2013-06-11T12:08:01.837 に答える
34

サブライムテキスト

崇高であなたはただ行く

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

次に、ファイルを保存します。この問題を修正します。

そんなに簡単!

于 2015-09-29T13:36:16.103 に答える
30

最近の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\rはWindowsの行区切り文字で使用されているキャリッジリターン()文字を無視します。

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

于 2012-07-28T11:02:38.477 に答える
24

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

vim .bashrc
:set ff=unix
:wq!
于 2018-08-23T16:44:32.580 に答える
22

エラー:

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

これは、シェルがWindowsのようなCRLF行末()を認識できないために発生します。これは、 ( )0d 0aのみを想定しているためです。LF0a


ギット

WindowsでGitを使用している場合は、セットアップ時に[そのままチェックアウト]を選択していることを確認してください。次に、次のコマンドを実行していることを確認します。git config --global core.autocrlf falseこれにより、Gitはテキストファイルをチェックアウトまたはコミットするときに変換を実行しません。


dos2unix

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

dos2unix ~/.bashrc

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

Ex/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

dos2unixLinuxでは、またはが標準で付属していないUbuntuのように、パッケージ( )unix2dosをインストールして、次のエイリアスを定義できます。tofrodossudo apt-get install tofrodos

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

次に、上記と同じ構文で使用します。


Vagrant

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

参照:VagrantでのWindowsCRLFからUnixLFへの問題

于 2016-03-08T16:24:10.410 に答える
18

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

bash -x -o igncr script.sh
于 2014-03-18T13:39:30.210 に答える
11

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

export SHELLOPTS
set -o igncr
于 2017-06-02T23:22:04.707 に答える
7

このファイルの作成/更新にnotepad++を使用した可能性があります。

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

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

Edit -> EOL Conversion -> Unix (LF)
于 2018-05-30T06:15:19.183 に答える
6

Notepad ++で解決:

1)メニュー->編集->EOL変換->Unix/OSX形式

2)次に保存

修理済み

于 2015-11-06T14:11:08.170 に答える
5

notepad ++(6.8.1)を使用してWindowsからLinuxにシェルスクリプトを出荷する人々。

メモ帳++編集->EOL変換->Unix/OSX形式で以下を設定します

于 2015-11-30T02:59:44.937 に答える
3

私も同じ問題を抱えていました。解決策:pspadエディターでファイルを編集し、UNIX形式にします([メニュー]-[形式]-> [UNIX])。

他の多くのエディタを使用して、この形式をファイルに設定できると思います

于 2015-02-24T09:08:31.733 に答える
3

そこにいるEmacsユーザーの場合:

  1. ファイルを開く
  2. Mxset-buffer-file-coding-system
  3. 「unix」を選択します

これにより、ファイル内の新しい文字がUNIXスタイルに更新されます。Emacsの「改行表現」の詳細については、次を参照してください。

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

注:コマンドラインからこれを実行したい場合は、上記の手順をEmacsスクリプトにすることができます。

于 2015-09-21T17:37:51.280 に答える
2

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

dos2unix ./script_name.sh

また

dos2unix ~/.bashrc
于 2017-05-25T07:17:36.163 に答える
2

Cygwinインストールにvimパッケージがインストールされている場合は、vimを使用して、検索および置換せずにこれを修正できます。次のようにvimを起動します:(vim filename.sh多くの場合、viにもエイリアスされます)。次に、と入力:set fileformat=unixし、次に:wq(書き込みと終了)を入力して変更を保存します。(:は、vimの編集モードになります。)

おそらくvimがより一般的にインストールされるので、dos2unixよりもこれをお勧めします。

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

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

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

Bashスクリプトと行末の詳細については、このStackOverflowの質問を参照してください。

于 2018-07-20T05:11:46.847 に答える
1

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

于 2016-11-16T12:57:28.580 に答える
-1

1.選択

EditorConfig EditorConfig —私の選択です。


2.関連性

この回答は2018年3月に関連しています。将来、この回答のデータは廃止される可能性があります。

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


3.制限

サポートされているIDE/エディターのいずれかを使用する必要があります。


4.議論

  1. 単に使用法。.editorconfigプロジェクトを作成するときにファイルを1回設定する必要があります。→プラットフォーム、スタイル、およびIDE固有の問題を忘れることができます。
  2. クロスプラットフォーム、クロス言語、クロスIDE、クロスエディター

5.例

5.1。単純

SublimeText用のEditorConfigプラグイン→テキストエディタをインストールします。SublimeTextでファイルを編集します。

たとえば、次の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たとえば、拡張子が、、のすべてのファイルでUNIXの行末を設定したいとし.bashrcます.bash_profile.editorconfig次の行をファイルに追加します。

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

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


6.追加のリンク

于 2018-03-01T13:10:10.323 に答える