![입력(다중 FIFO)을 기반으로 동적 프로세스 교체를 생성하는 방법은 무엇입니까?](https://linux55.com/image/63885/%EC%9E%85%EB%A0%A5(%EB%8B%A4%EC%A4%91%20FIFO)%EC%9D%84%20%EA%B8%B0%EB%B0%98%EC%9C%BC%EB%A1%9C%20%EB%8F%99%EC%A0%81%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EA%B5%90%EC%B2%B4%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다른 명령의 출력을 기반으로 여러 프로세스 교체를 생성하려고 하는데 이를 수행하는 방법을 잘 모르겠습니다.
예제 시나리오로 다음과 같은 파일 목록을 제공했습니다.
touch a.txt b.txt c.txt d.doc e.doc f.pdf g.pdf h.xls i.xls
나는 일을 해요사용 가능한 파일 확장자 목록:
ls -1 *.* | awk -F. '{if (NF>1) {print $NF}}' | sort | uniq
그런 다음 동적 목록을 기반으로 다음과 같은 FIFO를 생성하려고 합니다. 예를 들면 다음과 같습니다.
pr -mt <(ls -1 *.doc) <(ls -1 *.pdf) <(ls -1 *.txt) <(ls -1 *.xls)
이렇게 하면 각 그룹을 다른 열에 인쇄할 수 있습니다. 그러나 위의 FIFO 목록은 하드코딩되어 있으므로 내 목표는 동적 명령 수(예: 와일드카드, using 등)를 대체할 수 있는 방법을 찾는 것 eval
입니다 xargs
.
또 다른 상황은 다음에서 설명됩니다.여기.
위의 문제에 대한 구체적인 해결책(해결 방법)에는 관심이 없습니다. 이는 단지 하나의 상황일 뿐이기 때문입니다. 나는 셸에서 프로세스 교체를 동적으로 생성하는 방법이나 이를 달성하기 위해 사용할 수 있는 다른 도구에 관심이 있습니다.
또한보십시오:익명 FIFO를 생성하는 방법은 무엇입니까?
답변1
문자열을 동적으로 작성하고 평가하는 것은 쉽습니다.
eval "$(echo -n 'pr -mt '; while read ext; do echo "<(ls -1 *.$ext)"; done < list |tr '\n' ' ' )"
명령을 빌드하려는 확장 목록을 나타내는 list
파일(아마도 fifo)입니다 .
<()
기본적으로 이름이 지정되지 않은 FIFO를 생성합니다. 평가가 필요 없는 대안은 다음과 같은 이름을 사용하는 것입니다.
while read ext; do mkfifo ${ext}.pipe; ls -1 *.$ext > ${ext}.pipe & done
pr -mt *.pipe
rm *.pipe #remove the named pipes when done
위의 내용은 디렉터리에 ".pipe"로 끝나는 다른 파일 이름이 없다고 가정합니다.