표준 입력에서 목록을 읽고 명령을 내리는 유틸리티를 만들려고 합니다.
나는 다음 스크립트를 만들었습니다: (이름이 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