git-bashとcygwinシェルは同じことを行うことができますか?


13

Windows 10では、git-bashとcygwinシェルは同じことを行うことができますか?

何ができるのですか?

例えば、

  1. シェルとして、それらは両方ともbashと同じように機能しますか?
  2. 一方では実行できるが、他方では実行できないプログラムとコマンドは何ですか?

    たとえば、git-bashでは、一部のWindowsコマンドを実行できません。

    $  reg add "HKCU\Software\Microsoft\VisualStudio\14.0_Config\MSBuild" /v EnableOutOfProcBuild /t REG_DWORD /d 0 /f
    ERROR: Invalid syntax.
    Type "REG ADD /?" for usage.
    

    しかし、Cygwinではうまく動作します

    $  reg add "HKCU\Software\Microsoft\VisualStudio\14.0_Config\MSBuild" /v EnableOutOfProcBuild /t REG_DWORD /d 0 /f
    The operation completed successfully.
    

    元々、git-bashとcygwinはどちらもWindowsでプログラムを実行できると思っていました。なぜcygwinはできるのに、なぜgit-bashは動かないのですか?

ありがとう。

回答:


10

違いは、Cygwinがいわゆる「Win32」パス名の処理方法を知っていることです。大まかに言えば、「\」はパス名の区切り文字であり、Bashのようなシェルエスケープ文字ではないことを認識しています。あなたが示したエラーは、Bashが "\"をエスケープ文字として解釈することです。(編集:1つの\を2つに置き換えて、バックスラッシュをエスケープして、Bashがコマンドをreg.exeに正しく渡すようにすることもできます。)

そうは言っても、CygwinはWindowsのパス名を取得しますが、そうすることは好みません。ドキュメントには、それらを使用してからあなたをオフに警告します。もちろん、少し後退しても問題はありません。ただし、WindowsプログラムをCygwinで実行することはできますが、長期的な健全性のためには、WindowsプログラムをCMD.EXEプロセッサで実行し、UNIXプログラムをCygwinで実行することをお勧めします。


1
cygpathを使用して、ウィンドウ形式とUNIXパス形式の間で変換できます。
DavidPostill

ありがとう。コマンドのパス名がレジストリテーブルのキーとして使用されているので、それらの「\」を「/」に置き換えることはできますか?
Tim

たぶん、(新しく編集された)回答の提案を参照してください。
AlwaysLearning

1

2つの間には多くの重複があります。しかし、最終的にはWindowsでのbash / shallの異なる実装です。

Cygwinには、複数の異なるプログラミング言語、コンパイラ、さまざまなネットワークツールなど、インストールできるオプションのソフトウェアが多数あります。Xおよび多くのXアプリケーションをインストールすることもできます。

git bashを使用すると、取得したものを取得できます。追加のツールをインストールするのは少し難しいです。git bashで実行できないことがあるので、私は実際には自分のワークステーションに両方を持っています。私もgit bashウィンドウからのcygwinアプリの呼び出しに非常に複雑な成功を収めてきました。

また、cygwinは完全なposix環境であり、単なるbashインタープリターではないため、その中で非分散コードをコンパイルできることがよくあります。たとえば、見つけた素晴らしいLinuxツールのソースを見つけた場合は、通常、そのツールをCygwin。git bashではそれほどではありません。上記で触れたように、Cygwin用にコンパイルしても、git bashでは機能しない可能性があります。

それ以外はほとんど同じです。cygpathgit bash afaikはCygwinとは異なるソリューションであるMinGWに基づいているため、git bashにWindowsおよびPosixファイルパスを変換するコマンドが含まれているのを見るのはちょっとおかしいです。


0

私は違いを見つけました:このスクリプトはGit bashで実行できますが、Cygwinでは実行できません。

for file in *.xml; do
    echo "Processing file: $file"
    sed -r 's:<Autorizado>([0-9]+)</Autorizado>:<Autorizado>00013069</Autorizado>:' -i "$file"
    # ...
done

Git bashではxmlファイルを処理しますが、Cygwinではエラーが発生します。

Processing file: *.xml
sed: cannot read *.xml: No such file or directory

bash --version Git bashの場合:

GNU bash, version 4.3.42(5)-release (x86_64-pc-msys)

Cygwinの場合:

GNU bash, versión 4.3.46(7)-release (x86_64-unknown-cygwin)

これは、cygwinテストの場合、現在のディレクトリに.xmlで終わるファイルがないことを示唆しています。lsコマンドを使用して、現在のディレクトリに結果を表示する必要があります。
ピーター-モニカの復活

2つの端末で同じスクリプトを同時に実行しているので、これは当てはまりません。ファイルがあります。
WesternGun、

2
2つの可能性があります。(1)おそらくcygwinスクリプトが別のディレクトリで実行されているため、そのようなファイルはありません。その場合、シェルはパターンをそのままにします(空の文字列で置き換えるのではなく)。(パターンをfind引用符で囲まずにその方法で渡すことができることがわかるまで、ほとんど間違いのように聞こえます。)(2)ファイル名は実際には* .XML(大文字)であり、シェルオプションnocaseglobはgit shellで設定されています。グロブは大文字と小文字を区別しません(これはWindowsではある程度の意味があります)。
ピーター-モニカを復活させる
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.