grep が 0 の値を見つけると、状態 1 で終了します。

grep が 0 の値を見つけると、状態 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)

ただし、見つかった値が0の場合、まだ1回出口エラーが発生します。ここで欠けている部分が何かを案内してくれる人はいますか?

挨拶、

ベストアンサー1

これがどのシェルに対して作成されたかは明らかではありませんが、通常、変数名は数字で始めることはできません。

コードを貼り付け始めることをお勧めします。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。何を達成したいのか分かりません。説明したas&&は、作成者が1つ以上のコミットを持っている場合、成功した(0値)終了ステータスを取得したいという意味です。

[ $nr_commits -gt 0 ] && [ $nr_authors -gt 0 ]
exit

$nr_commitsゼロ以外の場合は作成者が必要であるため、$nr_authorsチェックを完全に削除して式を最適化できます。)

エラーに関しては、私が示したコードには何の問題もないので、let助けることはできません。let

おすすめ記事