1
私はbashを使い慣れていません。package.json(jq
)に列挙されている依存関係を調べるシェルスクリプトを書いています。それが2倍未満の場合は、それをエコーします。この繰り返しの呼び出しを `ack`に削除するには
arr=($(jq -r '.dependencies | keys | .[]' package.json))
for i in "${arr[@]}"
do
n=$(ack $i --ignore-dir=dist --ignore-file='match:/checkDependencies.sh|package.json/' | wc -l)
if [[ $n -le 2 ]]; then
echo "Package $i has too few occurences"
ack $i --ignore-dir=dist --ignore-file='match:/checkDependencies.sh|package.json/'
echo
fi
done
あなたは、私が二回ack
ことがわかります。どうすればack
を一度だけ入手できますか?私は変数に出力を設定しようとしましたが、それは私がそれをしたいどのように動作していません。
john1024の回答からの出力:
(今追加do
付き)ソリューションを提供
bash -x checkDependencies.sh
+ arr=($(jq -r '.devDependencies | keys | .[]' package.json))
++ jq -r '.devDependencies | keys | .[]' package.json
checkDependencies.sh: line 4: syntax error near unexpected token `s=$(ack "$i" --ignore-dir=dist --ignore-file='match:/package.json/')'
checkDependencies.sh: line 4: ` s=$(ack "$i" --ignore-dir=dist --ignore-file='match:/package.json/')'
arr=($(jq -r '.devDependencies | keys | .[]' package.json))
for i in "${arr[@]}"
do
s=$(ack "$i" --ignore-dir=dist --ignore-file='match:/package.json/')
if [ "$(wc -l <<<"$s")" -le 2 ]; then
echo "Package $i has too few occurences"
echo "$s"
fi
done
'wc'の呼び出しの前後に二重引用符を入れないでください。それは先行スペースで出力を出力するので、無視する必要があります。 – Barmar
@Barmar興味深い観察。私はちょうどそれをテストし、私は先頭のスペースの悪影響を参照してください。あなたは先導スペースがbashの算術比較を混乱させる状況を知っていますか? – John1024
これを得る:行4:予期しないトークン 's = $(ack" $ i "--ignore-dir = dist --ignore-file = '一致:/package.json/') 'の近くの構文エラー – swagrov