문제

사용을 이해하고 싶습니다 xargs man 안에 Rampion의 코드:

screen -t man /bin/sh -c 'xargs man || read'

Rampion 덕분에 : 우리는 고양이가 필요하지 않습니다!

왜 우리에게 필요한가? xargs 명령에서?

나는 이해한다 xargs -다음과 같이

  1. xargs에 고양이는 없습니다
  2. Xargs는 사람 -명령 목록을 만듭니다

Xargs가 명령 목록을 만든다는 아이디어가있었습니다. 예를 들어,

find . -type f -print0 | xargs -0 grep masi 

명령 목록과 동일합니다.

find fileA AND grep masi in it 
find fileB AND grep masi in it 
           and so on for fileC, fileD, ...
도움이 되었습니까?

해결책

아니요, 그렇지 않습니다 cat 아무것도 아님. 나는 명령을 실행 한 후에 얻는 입력을 고양이에 고양이. cat 실제로 여기에 외부이므로 무시합시다.

xargs man 사용자 입력을 기다립니다. 필요합니다. 스크립트에서 당신이 그것을 잡았 기 때문에, 나는 창을 만들 때까지 사람에 대한 논쟁에 붙여 넣을 수 없습니다. 그래서 창에서 실행되는 명령은 사람을 달리려고하기 전에 내가 무언가를 줄 때까지 기다려야합니다.

우리가 방금 달렸다면 screen /bin/sh -d 'man || read', 그것은 항상 "어떤 수동 페이지를 원하십니까?"라고 불평 할 것입니다. 우리는 그것을 말하지 않았기 때문에.

다른 팁

Xargs는 Stdin의 주장을 수집하고 그러한 주장으로 주어진 명령을 실행합니다.

그래서 고양이는 무언가를 입력하기를 기다리고 있으며 Xargs는 그 입력으로 사람을 달리고 있습니다.

XARGS는 처리 할 파일이 많으면 유용합니다. 종종 FIND의 출력과 함께 사용합니다. Xargs는 명령 줄에 최대한 많은 인수를 할 것입니다.
같은 일을하는 데 좋습니다

find . -name '*.o' -print | xargs rm

그만큼 cat 명령은 아무것도 작동하지 않습니다. 입력이 종료되었다고들 때까지 표준 입력에서 작동합니다. Rampion이 지적한 것처럼 cat 여기서 명령은 필요하지 않지만 암시 적 입력 (표준 입력)에서 작동하지 않으며 아무것도 아닙니다.

그만큼 xargs 명령은 출력을 읽습니다 cat, 정보를 인수로 그룹화합니다 man 명령은 (유일한) 인수로 지정됩니다. 한계에 도달하면 (명령 줄에서 구성 가능) man 명령.

그만큼 find ... -print0 | xargs -0 ... 관용구는 공백, 탭 및 신생과 같은 어색한 문자를 포함하는 파일 이름을 다룹니다. 그만큼 find 명령은 각 파일 이름과 ASCII NUL을 인쇄합니다 ('\0'); 이것은 간단한 파일 이름으로 표시 될 수없는 두 문자 중 하나입니다. 다른 하나는 '/'(물론 경로 이름으로 표시되지만 간단한 파일 이름에는 나타나지 않음)입니다. 그것은 당신이 제공하는 순서와 직접적으로 동일하지 않습니다. xargs 파일 이름 수집을 단일 인수 목록으로 그룹화하여 최대 크기 제한까지 그룹화합니다. 이름이 충분히 짧으면 (일반적으로 그렇습니다). grep 파일 이름이있는 것보다.

참고도 grep 검색 할 파일이 둘 이상인 경우 자료가 발견되는 파일 이름 만 인쇄하거나 옵션을 지원하여 항상 파일 이름을 인쇄하고 옵션이 사용됩니다. '-H'GNU 확장입니다 grep 그렇게합니다. 파일 이름이 항상 나타나는지 확인하는 휴대용 방법은 /dev/null 첫 번째 파일로 (SO 'xargs grep something /dev/null'); 검색하는 데 시간이 오래 걸리지 않습니다 /dev/null.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top