0

cygwin での ksh の代替として、pdksh が唯一の選択肢かもしれません。しかし、cygwin にはバグがあるようです: バックスラッシュ パス (\) をサポートするための pdksh(5.2.14-3)。

\ を飲み込みます:

$ cd .\access
pdksh: cd: /cygdrive/e/.access - No such file or directory

インターネットで検索した後、他のプラットフォームでも同じ問題が解決しました。しかし、cygwinでそれを解決する方法がわかりません。

4

4 に答える 4

1

Pdksh は、すべての Cygwin プログラムと同様に、ディレクトリ セパレータとしてバックスラッシュをサポートしています。ただし、それらを適切に引用する必要があります。Cygwin の下でシェル スクリプトを実行すると、物事を適切に引用すること、特に変数置換を常に二重引用符で囲むこと、不用意に echo を使用しないことを実際に教えられます (printf "%s" "$x"は移植可能で信頼性があります: とは異なりecho、バックスラッシュ展開を行うリスクはありません)。

pdksh の ksh88 との互換性は完璧とはほど遠いため、一部のスクリプトは他の理由で失敗する可能性があることに注意してください (たとえば、真の ksh ではあるが pdksh ではそうではありません) writer | readerreaderCygwin には が含まれておりzsh、実行後emulate kshはほとんど ksh88 と互換性があります (ただし、まだ完全ではありません)。

Interix SFU SUAATT 独自のポートなど、Windows 用の ksh の Cygwin 以外のポートがあります。

于 2010-08-25T23:35:26.403 に答える
0

この問題の回避策は次のとおりです。bash の使用を開始し、構成ファイルで次の変更を行います。

  • ~/.bashrcを開く
  • 最後に次のコードを追加します

    wcd() 
    {  
        cd $(echo "$@" | sed 's/\\/\\\\/g')   
    }
    
  • それを保存

  • bash ターミナルをリロードします。
  • タイプ

    wcd ".\access" 
    

    引用符と出来上がりとともに、独自の Windows 互換の cd コマンドがあります。

于 2011-12-22T23:42:59.383 に答える
0

スラッシュを使用するか、すべてのバックスラッシュを二重にするか、パス名である可能性のあるすべての文字列を単一引用符で囲む必要があります。申し訳ありませんが、これを回避する方法はありません。これは、\ がエスケープ文字である Unix シェルを Windows で使用しようとする際の一般的な問題です。

于 2010-08-24T18:16:21.153 に答える
0

Cygwin ユーザーズガイドから:

ノート

Win32 パスの使用は可能ですが、重要な内部パス処理メカニズムを回避するため、非推奨です。詳細については、「ネイティブ Win32 パスの使用」</a>セクションと「Cygwin アプリケーションでの Win32 ファイル API の使用」</a> セクションを参照してください。

cygpathWin32 パスと POSIX パスの間でそれぞれの方法を変換するシェル スクリプトで使用するように設計された、というユーティリティがあります。

于 2010-08-24T18:31:41.287 に答える