테스트 파일을 만들어 보겠습니다.

테스트 파일을 만들어 보겠습니다.

나는 한동안 이 문제로 어려움을 겪고 있는데 누군가 나를 대신해 명확하게 설명해 주시면 정말 감사하겠습니다. 두 명령을 함께 연결하려고 한다고 가정해 보겠습니다. readlink그리고cat

readlink Command output
$ readlink -f SUService.log
/cygdrive/c/SUService.log

이제 이와 같은 것을 시도하면 (실패합니다)

$ readlink -f SUService.log | cat

이와 같은 것이 작동하는 동안

$ readlink -f SUService.log | xargs cat

나는 그것이 왜인지 알고 싶었습니다. 내가 읽고이것OP에 비슷한 질문이 있는 여기에 게시하세요.이것인수와 입력 사이의 차이점을 설명하려고 시도하는 게시물이지만 여전히 허용되는 답변에 대해 머리를 감쌀 수 없습니다. 내가 이해하는 바는 입력을 인수로 원하는 readlink동안 터미널 화면인 stdout에 결과를 반환한다는 것입니다. cat그러면 명령의 출력(예: 찾기 또는 읽기 링크)이 다음 명령에 대한 인수로 작동할 수 있는지 여부를 어떻게 알 수 있는지 묻는 메시지가 표시됩니다. 더 많은 내용을 읽고 있는데 언제 xarg 명령을 사용해야 하는지 알고 싶습니다.

답변1

당신의 예는 다소 혼란 스럽습니다.

일반적으로 고양이에게 어떤 문자도 보내지 않습니다.

일반적으로 cat에게 파일을 보냅니다.

그럼에도 불구하고 cat에 일부 문자를 보내면 해당 문자가 인쇄됩니다.

$ echo abc12123 | cat
abc12123

일반적으로 cat에게 파일 이름을 보냅니다.

$ cat abc12123
cat: abc12123: No such file or directory

따라서 cat 자체는 파이프로 전달되는 재미있는 문자와 매개변수로 전달되는 재미있는 문자를 다르게 처리합니다.

$ cat b.b
textofb.b

$ echo b.b | cat
b.b

$ cat b.b
textofb.b

나는 당신보다 더 간단한 예를 사용하겠습니다

$ echo b.b | xargs cat
textofb.b

asdfasdfs | xargs catasdfasdfs의 출력을 매개변수로 cat에 보내기 때문에 bb의 내용을 인쇄합니다 .

그래서

echo b.b | xargs cat   
=  
cat b.b

반면 에 는 다음 echo b.b | cat 과 같지 않습니다.cat b.b

답변2

다음 명령은~ 아니다실패하다. 이는 단순히 예상하지 못한 작업을 수행합니다.

readlink -f SUService.log | cat

stdin이 주어 지면 cat이를 stdout에 복사합니다. 그 안에 있는 파일 이름을 찾지 않습니다.

또는 명명된 파일에서 읽습니다.

cat "$(readlink -f SUService.log)"

xargs또한 명령줄에 이름을 입력하면 cat동일한 결과가 나타납니다.

readlink -f SUService.log | xargs cat

답변3

cat 및 xargs의 맨페이지를 살펴보고 이들이 수행하는 작업을 확인하세요.

man cat

cat - concatenate files and print on the standard output

그리고:

man xargs

xargs - build and execute command lines from standard input

여기에 약간의 데모가 있습니다.

테스트 파일을 만들어 보겠습니다.

echo "a" > test
echo "b" >> test
echo "c" >> test

고양이

cat test

파일을 읽고 다음을 제공합니다.

a
b
c

에코 | 고양이

echo test | cat

에 따르면 man cat이는 다음과 동일합니다.

echo test | cat -

cat의 stdin으로 파이프를 연결 test하고 cat에게 stdin에서 읽도록 지시합니다.

에코 | xargs 고양이

echo test | xargs cat

다음 명령을 생성하고 실행합니다.

cat test

이것의 결과는 이미 보여드렸습니다.

우리가 달리면

<test xargs -n1 cat

Xargs는 입력 시 다음을 확인합니다.

a
b
c

그리고 다음 명령을 생성합니다.

cat a
cat b
cat c

해당 파일이 존재하지 않기 때문에 세 가지 오류가 발생합니다.

-n1?

에 따르면 xargs man xargs-n1생성하는 각 명령에서 하나의 인수(stdin에서 읽음)를 사용하도록 지시합니다.

대신 사용하면 -n2명령당 최대 두 개의 매개변수를 사용하는 다음을 생성합니다.

cat a b
cat c

그리고 다음을 사용하거나 -n3단순히 생략하는 경우 -n:

< test xargs cat

우리는 다음을 얻습니다:

cat a b c

관련 정보