我創建了以下應該運行多個笑話測驗的批處理:
#!/bin/bash
echo 'The test will run 10 times per loop. The number of loops are 20.'
echo 'Total number of instances that will be run: 200 instances'
echo 'Starting in 5 seconds...'
sleep 5
for i in {1..20}; do ${1} & ${1} & ${1} & ${1} & ${1} & ${1} & ${1} & ${1} & ${1} & ${1} || (echo 'Failed after $i attempts' && break); done
想法是,一旦我作為引數通過測驗,它將像這樣運行:npm run test SomeTest.test.ts & npm run test SomeTest.test.ts & npm run test SomeTest.test.ts.這樣我將同時運行相同的測驗,而不必等待它完成。
我已經將它添加到我的 package.json 中,如下所示:
"scripts": {
"stress-test": "./scripts/bash.sh"
}
這個想法是這樣運行的,因為我只想從我的 .test 檔案中運行一個包含多個測驗的測驗npm run test MyJestTest.test.ts -- -t 'some specific test'。這個命令在沒有 bash 的終端上使用時就像一個魅力。但是,如果我嘗試將它與 bash 一起使用,它將無法正常作業。
npm run stress-test -- "npm run test NelnetService.test.ts -- -t 'loan transactions gets loan transactions data'"
由于某種原因,它不會接受-t我添加的引數。主要思想是通過回圈同時多次執行特定測驗。
誰能幫我?
uj5u.com熱心網友回復:
npm run test SomeTest.test.ts && npm run test SomeTest.test.ts && npm run test SomeTest.test.ts 。有了這個,我將同時運行相同的測驗,而不必等待它完成。
您誤解了“ && ”的含義。
這些組件不會同時運行。
只有在第一段成功完成后,shell 才會被指示執行第二段,只有在第二段成功完成后,shell 才會被指示執行第三段。“三元組”序列將在第一個失敗條件處停止。
為了確保所有實體同時運行,無論回傳碼值如何,您都需要運行類似
npm run test SomeTest.test.ts &
npm run test SomeTest.test.ts &
npm run test SomeTest.test.ts &
wait
這等待將確保您僅在所有這些后臺行程完成后繼續下一步。
uj5u.com熱心網友回復:
這個命令在沒有 bash 的終端上使用時就像一個魅力。但是,如果我嘗試將它與 bash 一起使用,它將無法正常作業。
您需要檢查每個終端提示和腳本中${SHELL}報告的值(在腳本中添加該值的回顯以探測該值)。您可能認為您正在(或沒有)對每個都使用 bash,但您需要確保明確指定所需的 shell 與您希望的相同或不同。
我總是知道這種區別,因為我的終端 shell 是 bash,但我的腳本總是用#!/bin/sh編碼, 這不是完全 bash 子集;存在您需要注意和編碼的行為沖突或差異。
我知道 shell 如何處理“--”后面的內容是不同的。您需要驗證在解釋命令時處于活動狀態的 shell 是否按照您期望的方式處理后續字串。
想到的另一個 shell 差異示例是 bash 需要在“echo”陳述句上使用“-e”才能正確擴展換行符和其他字符。出于這個原因,我更喜歡使用傳統/遺留/過時/更好的“sh”來撰寫腳本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/520120.html
