リストから取得し、各要素に対して(固有の)コマンドを実行するユーティリティ

リストから取得し、各要素に対して(固有の)コマンドを実行するユーティリティ

標準入力からリストを読み、コマンドを発行するユーティリティを作成しようとしています。

私は次のスクリプトを作成しました:(名前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

関連情報