내가 가지고 있다고 가정하면 해당 플래그에 의해 생성된 질문에 또는 자동으로 대답하려면 ls | xargs -n1 -p rm
어떻게 해야 합니까 ?yes
yes 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
이는 디렉터리 또는/및 파일에 적용됩니다.