2017-05-12 13 views
-1

私はWindowsに移植しようとしているbashスクリプトを持っています。入力文字列を受け取り、stdinからopensslに渡してhmacを作成します。opensslへの入力パラメータの配管

どうすれば移植できますか?

echo -n $BUILD | "$OPENSSL" dgst -sha256 -mac HMAC -macopt hexkey:$SECRET | awk '{ print $2 }' 

* BUILDは、スクリプトの入力パラメータに由来します。 -macと-macoptは、Windowsバイナリ上で有効なオプションではないようです。スクリプトは、コンソールにhmacを表示する必要があります。

+0

質問する前に何か試しましたか?私は努力やバッチコードを見ることができません – jeb

+1

Stack Overflowはプログラミングと開発の質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 [Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306) – jww

答えて

1

これ示すスクリプト(もちろん、OpenSSLのが依然として必要とされる)バッチで

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "BUILD=something" 
    set "SECRET=0102030405060708090a0b0c0d0e0f" 
    set "OPENSSL=x:\somewhere\openssl.exe" 

    for /f "tokens=2" %%a in (' 
     ^<nul set /p ".=%BUILD%" 
     ^| "%OPENSSL%" dgst -sha256 -mac HMAC -macopt hexkey:%SECRET% 
    ') do echo %%a 
  • のバッチバージョンで、変数はsetを使用して値を割り当てられ、その値が$VAR構文を使用して取得されていません

  • echoコマンドには、CR + LF行の末尾が常に含まれます。-nオプションは存在しません。 Inは、<nul set /pコマンドを使用して(制限付きで)複製できます。

  • awkのWindowsバイナリを使用している場合は、元のコードで同じパイプを使用できますが、一重引用符ではなく二重引用符で囲みます。提案されたコードset /p | opensslパイプの出力を読み取り、ラインに第二のトークンを取得するためにfor /fコマンドを使用して(既定の区切り文字では、スペース、タブである)

  • 内で使用される場合、リダイレクトとパイプ文字をエスケープする必要があります(私は手元に持っていたもの)のopenssl 1.0.2gでテストされ、-mac-macopt引数WOR:infor /fコマンドの句、^<^|

ノート理由k問題なし。

+0

も参照してください。ありがとう。 – Avram

関連する問題