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/
だから私はファイルが正しい場所に配置されるべきだと思います。
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
を試してください。
このエラーの原因となっている末尾の\r
文字を削除します。
sed -i 's/\r$//' filename
説明:
オプション-i
は、インプレース編集用です。入力ファイルの末尾の\r
を直接削除します。そのため、パターンを正しく入力するように注意してください。
私はcygwinとWindows7を使っています。トリックはset -o igncr
をあなたの.bashrcに入れるのではなく、SHELLOPTS
全体をあなたの環境変数に入れることでした。私たちがドイツ語で言うように「滴は既に吸い込まれている」ので、私はそれが.bashrc
からうまくいかないと思います。 ;-)だから私のSHELLOPTS
はこんな感じです
braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor
WINDOWSユーザーが Notepad ++ (v6.8.3でチェック済み)を使用している場合、特定のファイルを修正できますオプションを使う - 編集 - > EOL変換 - > Unix/OSXフォーマット
そしてファイルをもう一度保存してください。
編集:まだv7.5.1で動作します(2017年8月29日)
最近の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 を参照してください。
サブテキスト
崇高であなたはただ行く
表示 - >行末 - >(選択)Unix
それからファイルを保存します。この問題を修正します。
それは簡単!
Bash呼び出しにオプション-o igncr
を追加することもできます。
bash -x -o igncr script.sh
エラー:
'\r'
:コマンドが見つかりません
これはShellがWindowsのようなCRLF行末(0d 0a
)を認識できないためです。これはLF
(0a
)のみを想定しているためです。
WindowsでGitを使用している場合は、セットアップ中に 'チェックアウトをそのまま'を選択したことを確認してください。それから、必ずgit config --global core.autocrlf false
を実行してください。そうすれば、Gitはテキストファイルをチェックアウトまたはコミットするときに変換を実行しません。
dos2unix
Gitを使用していない場合は、次のいずれかの方法で、影響を受けるファイル/スクリプトをUnix風のLF(Line End)に戻す必要があります。
dos2unix ~/.bashrc
注:dos2unix
コマンドはdos2unix
パッケージの一部です。
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のようにdos2unix
もunix2dos
も標準とはなっていません。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
次のコマンドを実行してみてください
vim .bashrc
:set ff=unix
:wq!
この 要旨 に従って、解決策は以下を含む~/.bash_profile
を(HOME
ディレクトリに)作成することです。
export SHELLOPTS
set -o igncr
メモ帳++(6.8.1)を使用してシェルスクリプトをWindowsからLinuxに配布している人。
メモ帳++編集 - > EOL変換 - > Unix/OSXフォーマットで以下を設定します。
Notepad ++で解決されました:
1)メニュー - >編集 - > EOL変換 - > Unix/OSXフォーマット
2)保存
一定
私は同じ問題を抱えていました。解決策:私はpspadエディタでファイルを編集し、それにunixフォーマットを与えます(メニュー - フォーマット - > UNIX)。
私はあなたが他の多くのエディタであなたのファイルにこのフォーマットを設定できると信じています
これにより、ファイル内の新しい文字がUNIXスタイルに更新されます。 Emacsの "Newline Representation"に関するより詳しい情報はここにあります:
http://ergoemacs.org/emacs/emacs_line_ending_char.html
注意:コマンドラインから実行することを好むのであれば、上記のステップをEmacsスクリプトにすることができます。
EditorConfig - 私の選択です。
この答えは2018年3月に関連しています。将来、この答えからのデータは時代遅れになるかもしれません。
この回答の作者は2018年3月に個人的にEditorConfigを使用しました。
サポートされているIDE/editors のいずれかを使う必要があります。
.editorconfig
ファイルを1回設定する必要があります。→忘れてもいいです プラットフォーム、スタイル、IDE固有の問題 .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!
コンソールに予期しない出力が表示されません。
たとえば、拡張子が.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)
EditPlus では、Document → File Format (CR/LF) → Change File Format...
メニューからこれを行い、次にUnix / Mac OS X
ラジオボタンを選択します。
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の質問 にあります。
Windowsマシンから作成/ダウンロードされたファイル/スクリプトが原因で、問題が発生した可能性があります。 linuxファイル形式に変換してみてください。
dos2unix ./script_name.sh
または
dos2unix ~/.bashrc