標準入力からリストを読み、コマンドを発行するユーティリティを作成しようとしています。
私は次のスクリプトを作成しました:(名前consume_list
)
#!/bin/bash
set -euo pipefail
eval "hack() { $@ ; }"
while read -r line
do
hack "$line"
done < <(cat /dev/stdin)
これにより、コマンドをラップし、スクリプトの読み取りと生成を簡素化できます。
悪い例は、次のようにリストでbash置換を使用することです(私はsed、cut、trなどよりも簡単です)。
cat log.txt | grep 'error' | consume_list 'echo ${1:20:10}'
これは
お持ちですか?正しいツールこれを達成するには?
答え1
標準入力(または他の場所)の一連の行からコマンドを実行する「正しい」ツールは次のとおりです。xargs
:
grep error log.txt | xargs -r -d\\n -n 1 bash -c 'echo ${0:20:10}'
しかし、あなたの例では、実際に以下を使用する方がはるかに良いですcut
。
grep error log.txt | cut -c21-30