2017-05-12 95 views
-1

我有一個bash腳本,我試圖移植到Windows。它需要一個輸入字符串並將其通過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堆棧交換](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語法不提取它們的值但是%VAR%

  • 批量中,echo命令將始終包含CR + LF行尾,-n選項不存在。可以使用<nul set /p命令複製(有限制)。

  • 如果您有一個用於awk的windows二進制文件,您可以在原始代碼中使用相同的管道,但使用雙引號而不是單引號。所提出的代碼使用for /f命令讀取set /p | openssl管的輸出,並且在該行中檢索第二令牌(默認定界符是空格和製表符)

  • 需要內部的使用時進行轉義的重定向和管字符in子句for /f命令,爲^<^|

的原因:使用OpenSSL 1.0.2g(我已在手的)測試和-mac-macopt參數WOR k沒有問題。

+0

釘住它。謝謝。 – Avram