파이프를 사용하여 명령 2에서 명령 1의 출력을 재사용합니다.

파이프를 사용하여 명령 2에서 명령 1의 출력을 재사용합니다.

숫자 목록을 반환하는 Linux 명령이 있습니다. 이제 디렉터리 경로를 형성하고 해당 경로에 있는 파일을 캡처하려면 이 숫자가 필요합니다. 예: myCommand는 다음을 반환합니다.

1 
10
30 
40

다음과 같은 모든 파일을 캡처하고 싶습니다.

 /folder/1/folder2 
 /folder/10/folder2 
 /folder/30/folder2
 /folder/40/folder2

내가 원하는 것이 무엇인지 알기를 바랍니다. 그렇지 않다면 언제든지 문의해 주세요. 이것은 내 현재 코드입니다.

 myCommand | xargs cat

그러나 디렉토리 1,10,30 및 40이 존재하지 않기 때문에 분명히 작동하지 않습니다.

나는 출력을 다음과 같이 하고 싶습니다: catted value - myCommand에 의해 생성된 숫자

답변1

일을 하는 데에는 문제가 없습니다xargs

myCommand | xargs -I{} sh -c 'echo -n {}\ ; cat /folder/{}/folder2/file'

그러나 for루프를 사용하는 것이 구문적으로 더 정확하고 유연합니다.

for genpath in $(myCommand)
do
    echo -n $genpath\ 
    cat /folder/$genpath/folder2/file
done

아니면 while루프를 통해서라도

while read genpath
do
    echo -n $genpath\ 
    cat /folder/$genpath/folder2/file
done < <(myCommand)

답변2

-Iwith를 사용하여 xargs명령의 자리 표시자를 바꿀 수 있습니다 .

myCommand | xargs -I % cat /folder/%/folder2

답변3

대괄호 목록 확장을 사용하여 명령 대체를 시도할 수 있습니다.

cat /folder/["$(myCommand)"]/folder2

printf명령의 예:

$ mkdir dir1 dir2 dir3
$ echo a > dir1/file
$ echo b > dir2/file
$ echo c > dir3/file
$ cat ./dir["$(printf "%s\n" {1..3})"]/file
a
b
c

관련 정보