web-dev-qa-db-ja.com

Mingw32 / Msysは引数を台無しにすることなくdos / cmd.exe実行可能ファイルを実行できますか?

Windowsのbashプロンプトからgrowlnotify.exeを実行しようとしています。 mingw32用に再コンパイルすることは私にとって良いオプションではありません。

growlnotifyは、cmdプロンプトから使用すると機能しますが、bashプロンプトからは(ほとんど)失敗します。スイッチなしの引数(通知メッセージ)を1つだけ取ることができるようです。複数の引数がある場合、それは黙って失敗します。スイッチが1つあり、他の引数がない場合、そのスイッチはメッセージとして送信されます。

私は、Windowsが実際のttyを提供しない方法と関係があるという、Googleに関するいくつかのヒントをなんとか掘り下げましたが、修正はありません。これを強制的に機能させる賢い方法はありますか?期待どおりに動作するように引数を正しくエスケープする方法はありますか?

新しい情報:

トリプルスラッシュで実行すると、引数は無視されます。一方、DOSで正しい形式で実行すると、サイレントに失敗します。

失敗(//を使用すると失敗します):

growlnotify /a:'Application Name' /n:'Notification Type' 'message goes here'

でもこれは:

growlnotify ///a:'Application Name' ///n:'Notification Type' 'message goes here'

その1つは、「メッセージはここにあります」という通知を送信しますが、最初の2つの引数を含めることを気にしなかったかのように。ただし、シングルまたはダブルスラッシュは、通知を送信しません(引数をまったく含めなかったかのように)。

4重および5重のスラッシュは、3重のスラッシュと同じように動作します。

各種スイッチの説明

7
John O

わかりました、正しい答えが続きます。

Dos実行可能ファイルを使用できるように引数をエスケープするには、次のようにスラッシュを2倍にします。

growlnotify //a:Application //t:Title "message here"

それが失敗する理由は、どういうわけか、前日に開始したときと同じアプリケーション名を使用していなかったためです(また、別のアプリケーションとして登録が解除され、Growl For Windowsは未登録の通知を無視します)。

言及する価値のある他のいくつかのトリックがあります。 CMDでは、次のようなステートメントを発行できます。

growlnotify //a:App //t:"With Spaces" "message here"

「スペースあり」爆弾。 msys/bashが引用符を展開し、それを渡して、実行可能ファイルに2つの引数// t:WithSpaces "が表示されるようにしていると思います。正しいそれを行う方法は次のようです:

growlnotify //a:App //t:With\ Spaces "message here"

また、ファイルパスを渡す場合でも、スラッシュを意味するDOSスタイルを使用する必要があります(最終的には、それを消費するのはDOSのような実行可能ファイルであるため)。しかし、それらはエスケープとして解釈されます。つまり、それらも2倍にする必要があります。

growlnotify //a:App //ai:C:\\path\\to\\icon.png "message here"

これが将来誰かに役立つことを願っています。

10
John O

MinGWから「cmd.exe/cgrowlnotify.exe ...」を実行してみましたか?

4
Mikhail Kupchik