2

私はMSYSを使用して、Windowsで適切なスクリプト可能なシェルのいくつかの類似点を取得しています:)。

ここで、C#で記述されたコンソールアプリケーションを作成しています。このアプリケーションは、多数の引数を受け入れ、それらをオプションとしてダイアログボックスに表示します。実際のオプションは、lsで取得しているファイル名に対応しています。

ただし、スペースを含むファイル名を使用すると問題が発生します。次の名前のファイルがあるとします。

file name
with spaces

fooというディレクトリでは、C#実行可能ファイルはbarと呼ばれ、その中で "argv"配列の内容(つまり、.NETによって解釈されるようにアプリケーションに渡されるコマンドライン引数)を検査します。

私がそれを呼ぶとき、次の奇妙さが起こります:

./bar.exe"ファイル名""スペースあり"->

file name
with spaces

./bar.exe $(ls foo)->

file
name
with
spaces

./bar.exe $(ls -Q foo)->

"file
name"
"with
spaces"

ここで何が起こっているのか誰か知っていますか?どうやら、.NETはbashまたはlsのいずれかによって渡された引数を正しく解析していません。

しかし、引用符を追加しても、2つの引数を1つに結合するのではなく、引用符が引数に含まれます。

未処理のコマンドラインにアクセスする方法もあるので、制御文字などでファンキーさが発生しているかどうかを確認できますか?

どんな洞察も大歓迎です!

4

3 に答える 3

1

Environment.CommandLine元のコマンドを取得するために使用できます。申し訳ありませんが、bash についてはわかりません。おそらく行末に関係するもの(CR vs LF vs CRLF vs LFCR)。

于 2009-03-16T09:10:22.247 に答える
0

問題は、コマンドラインでパラメーターを渡していることと、コマンドラインが各単語を個別のパラメーターとして読み取ることだと思います。「ファイル名」「スペースあり」を試してみてください..
コードを介して渡す場合は

ProcessStartInfo.Arguments = "\"File Name \"" ;

Process への引数として

于 2014-02-03T10:21:52.290 に答える