간단한 대답

간단한 대답

나는 문제 xargspipe명령에 어려움을 겪고 있습니다. 다음은 한 가지 예입니다 =

echo 'a' | xargs mkdir

이 명령은 이름이 a.인 디렉터리를 생성합니다. 그래서 나는 이 명령이 다음과 동일하다는 것을 이해할 수 있습니다.mkdir a

그런데 왜 이 명령이 작동하지 않습니까 echo 'a' | mkdir?

pipe명령이 왼쪽 명령의 출력을 인수로 오른쪽 명령으로 전송할 때 명령 이 왼쪽 명령의 출력을 오른쪽 명령의 입력으로 전송한다는 것을 읽었습니다 | xargs.

1-입력과 인수의 차이점은 무엇입니까?

2- echo 'a' | mkdir이 명령이 작동하지 않는 이유는 무엇이며 이 명령과 동등한 것은 무엇입니까?

감사합니다...

답변1

간단한 대답

인수는 입력입니다.

더 긴 답변

다른 유형의 입력도 있습니다.

귀하의 예에서는 표준 입력을 읽을 것으로 echo 'a' | mkdir예상됩니다 . mkdir그러나 mkdir이 작업을 수행하도록 작성되지 않았습니다.

입력이라고 부르는 것은 표준 입력( stdin)입니다. 그리고 출력은 표준 출력( stdout)입니다. 표준오차( )가 모두 있습니다 stderr. 그리고 종료 코드입니다.

더 긴 답변 - 그렇다면 차이점은 무엇입니까?

프로그램이 시작되기 전에 인수를 사용할 수 있어야 합니다. 일반적으로 다음과 같습니다. 짧습니다. 옵션, 파일 이름 및 짧은 텍스트가 포함되어 있습니다.

표준 입력은 프로그램이 실행되는 동안 기록될 수 있습니다. 프로그램이 시작될 때 존재하지 않았던 데이터가 전송될 수 있습니다. 순서 없이 읽을 수 있다는 보장은 없습니다(따라서 순차적으로 읽으세요). 길이는 임의적일 수 있습니다. 인수로 더 많은 전송 파일 이름이 필요한 경우 프로세스당 하나의 표준 입력만 있습니다.

echo 'a' | xargs mkdir없이 하는 방법xargs

mkdir "$(echo 'a')"

이는 $()포함된 명령을 실행한 다음 및 $()해당 내용을 해당 명령의 표준 출력으로 바꾸는 것을 의미합니다.

답변2

나 역시 이것 때문에 아주 오랫동안 혼란스러웠다. 조금 더 간단한 예를 들어 보겠습니다. (저는 bash 전문가가 아닙니다.)

wc "test" 
wc <<< "test" (same as: echo "test" | wc)

이 둘의 결과는 매우 다릅니다. 첫 번째는 파일 읽기를 시도하고 test, 두 번째는 을 보여줍니다 1 1 5.

여기서 문제 wc "test"논쟁 "test"입력으로 while wc <<< "test"소요표준입력.


따라서 발행할 때 echo 'a' | xargs mkdir(xargs는 인수로 실행을 나타냄)논쟁에게 mkdir; 그것은 다음과 같습니다: mkdir a.

반면에 발행할 때 echo 'a' | mkdir(간단한 것은 : mkdir <<< 'a') stdin으로 전달합니다 a.

mkdir이러한 것들을 매우 다르게 취급하므로 결과가 표시됩니다.

관련 정보