"xargs -p"와 함께 "yes"를 어떻게 사용합니까?

"xargs -p"와 함께 "yes"를 어떻게 사용합니까?

내가 가지고 있다고 가정하면 해당 플래그에 의해 생성된 질문에 또는 자동으로 대답하려면 ls | xargs -n1 -p rm어떻게 해야 합니까 ?yesyes n-p

나는 시도했지만 yes n | (ls | xargs -n1 -p rm)성공하지 못했습니다.

고쳐 쓰다: 질문은 실제로 질문이 아니라 올바르게 사용하는 방법에 대한 질문 rm입니다 . yes나는 내가 사용하는 별칭이나 함수를 가지고 xargs -p있으며 그것을 실행하기 전에 나에게 무엇을 하고 있는지 물어보고 보여주는 것을 좋아합니다. 나는 그것이 무엇을 할 것인지 알 때 함수의 모든 것을 yes자동으로 반복 할 수 있기를 원합니다. xargs -p따라서 예제에서는 이를 사용하지만 rm실제로는 내용이 아닙니다.

또한, 좀 더 명확하게 말하자면, 사용할 별칭이나 함수를 수정하고 싶지 않고 -p그냥 외부에서 yes라고 입력하는 편이 낫습니다.

솔직히 말하면 yes | some_function_asking_me_questions뭔가 some_function_asking_me_questions <( yes )효과가 있을 거라 생각했는데 그렇지 않더라고요.

두 번째 편집:또 다른 예: 지역의 AWS SNS 주제를 나열하는 별칭이 있습니다. 예:

alias delete_snstopics="list_sns | cut -f 2 | xargs -n1 -p aws sns delete-topic --topic-arn "

그런 다음 AWS의 각 지역에 대해 이러한 SNS 주제를 찾아 삭제하라는 메시지를 표시하는 기능이 있습니다. SNS 주제의 ID가 매번 다르기 때문에 xargs가 실행되는 것을 보고 싶습니다. aws sns delete-topic --topic-arn $1문제가 발생하면 웹 콘솔에서 SNS ID를 일치시킬 수 있습니다. 또한 때로는 특정 영역에 대한 SNS 주제를 삭제하고 싶지 않을 수도 있습니다. 그렇기 때문에 yes부분 삭제와 전체 삭제에 동일한 기능을 사용하면서도 여전히 유용한 출력을 얻을 수 있도록 이 기능을 사용하고 싶습니다. 말이 되나요?

답변1

명령을 분석해 보겠습니다.

yes n | (ls | xargs -n1 -p rm)

파이프는 표준 입력을 ls | xargs -n1 -p rm읽지 ls만 표준 출력을 xargs표준 입력으로 리디렉션하며 표준 출력은 변경되지 않습니다.

이제 출력을 yes이 파이프로 파이프합니다. 해당 파이프의 표준 입력이 들어오기 때문에 ls읽지도 않고 xargs아무것도 표시되지 않습니다.

이제 분명한 질문은 다음과 같습니다. xargs명령을 실행할지 여부를 어떻게 물어볼 수 있습니까? 결국 표준 입력(프로그램이 일반적으로 사용자 상호 작용을 읽는 곳)은 ls!의 출력을 읽도록 리디렉션됩니다.

글쎄, 대답은 xargs터미널 파일을 직접 열어 이러한 문제의 리디렉션 메커니즘을 우회하는 것 입니다 /dev/tty. 따라서 입력이 파일 리디렉션의 영향을 받지 않는지 확인하세요.

에 입력하려면 xargs프로그램에 의해 제어되는 터미널 장치를 통해 프로세스를 렌더링할 수 있는 프로그램이 필요합니다. 매우 강력하지만 매우 복잡한 프로그램은 expect불행하게도 원하는 것을 달성하는 더 쉬운 방법을 모릅니다.

답변2

당신은 그것을 사용할 수 있습니다 :

ls | xargs -n1 rm -r

이는 디렉터리 또는/및 파일에 적용됩니다.

관련 정보