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
이러한 것들을 대하는 방식이 매우 다르기 때문에 보는 결과도 다릅니다.