Shell-Script
當發現零值時 grep 退出狀態為 1
下面是我的程式碼
1_week=$(git log --since=$(date +"%Y-%m-%d" --date="@$(($(date +%s) - 604800))")|grep '^commit ' |wc -l) && 2_week=$(git log --since=$(date +"%Y-%m-%d" --date="@$(($(date +%s) - 604800))")|grep '^Author:' |sort -u|wc -l)
錯誤:
+ let '1_last_week += 0' /home/mytestshell.sh exited with return code 1
我嘗試在下面引用此https://blog.m157q.tw/posts/2021/06/09/be-careful-when-using-grep-on-circleci/
1_week=$(git log --since=$(date +"%Y-%m-%d" --date="@$(($(date +%s) - 604800))")|grep '^commit ' || true |wc -l) && 2_week=$(git log --since=$(date +"%Y-%m-%d" --date="@$(($(date +%s) - 604800))")|grep '^Author:' || true |sort -u|wc -l)
但如果找到的值為零,它仍然會給出退出 1 錯誤,有人可以指導我在這裡缺少什麼
問候,
您不會說這是為哪個 shell 編寫的,但通常變數名不能以數字開頭。
我強烈建議您開始將程式碼粘貼到https://shellcheck.net(或
shellcheck
在本地安裝)。它將幫助您解決很多問題,然後您可以直接解決這些問題。你的風格也會從改進中受益。一長串密集的程式碼不容易閱讀和理解。作為對比,這裡是另一種風格
#!/bin/sh # dt_since=$(date --date='1 week ago' +'%Y-%m-%d') nr_commits=$(git log --since="$dt_since" | grep '^commit ' | wc -l) nr_authors=$(git log --since="$dt_since" | grep '^Author:' | sort -u| wc -l)
然後,您可以使用 和 中的結果執行一些數學
$nr_commits
運算$nr_authors
。我不確定您要達到什麼目的,因此我將您解釋&&
為如果一位作者至少有一次送出,您想要成功(0 值)退出狀態:[ $nr_commits -gt 0 ] && [ $nr_authors -gt 0 ] exit
(請注意,如果
$nr_commits
不為零,則必須有作者,因此您可以通過$nr_authors
完全刪除檢查來優化表達式。)關於 的錯誤
let
,您向我們展示的程式碼中沒有任何let
內容,因此我們無法提供幫助。