간단한 대답

간단한 대답

xargs및 명령에 문제가 있습니다 pipe. 다음은 예입니다=

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"wc <<< "test"입력 으로표준 입력.


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

반면에 echo 'a' | mkdir(easier: mkdir <<< 'a')를 발행하면 a이를 표준 입력으로 전달합니다.

mkdir이러한 것들을 대하는 방식이 매우 다르기 때문에 보는 결과도 다릅니다.

관련 정보