
나는 한동안 이 문제로 어려움을 겪고 있는데 누군가 나를 대신해 명확하게 설명해 주시면 정말 감사하겠습니다. 두 명령을 함께 연결하려고 한다고 가정해 보겠습니다. 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 cat
asdfasdfs의 출력을 매개변수로 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