표준 출력 결과를 한 줄씩 실행하고 확인 메시지를 표시합니다.

표준 출력 결과를 한 줄씩 실행하고 확인 메시지를 표시합니다.

(아마도) 몇 줄을 인쇄한 다음 한 줄씩 실행하고 싶은 명령이 있습니다( xargs사용 또는 기타 등등).

find . -name "*string*" -print | awk '{ print "echo " $1 " >> file.txt" }' | xargs -L 1

각 명령은 명령의 추가 실행을 확인하거나 취소하기 위해 사용자가 명시적으로 입력해야 하는 echo ... >> file.txt프롬프트와 함께 실행됩니다 .Enter a value:yesno

yes예를 들어, 이것을 항상 입력하도록 라인에 파이프하는 것이 가능합니까? 아니면 사용자가 "예"를 입력할 때까지 일시 중지하시겠습니까?

지금까지 두 가지 가능한 솔루션을 고려하고 있습니다.

  1. 예상 스크립트를 사용하십시오.
  2. 실행된 명령줄의 표준 출력을 한 줄씩 캡처하고 프롬프트에 도달할 때까지 줄을 반복한 다음 사용자 입력이나 자동 추가 yes또는 추가를 기다립니다 no.

이 작업을 수행하고 나중에 추가 명령을 파이프하는 더 쉬운 방법이 있습니까 xargs? (아마도 나는 항상 들어가고 싶습니까 yes?) 위의 솔루션 중 어느 것이 더 좋을까요? 크로스 플랫폼 호환성을 보장하고 expect.

답변1

string이름에 해당 문자열이 포함된 모든 파일의 경로 이름을 파일에 추가 file.txt하고 각 파일을 확인하려고 합니다.

수행 방법은 다음과 같습니다 find.

find . -name '*string*' -ok printf '%s\n' {} \; >>file.txt

사용자가 ( 또는 )로 응답하면 이 -ok옵션은 지정된 유틸리티를 실행하고 찾은 경로 이름을 삽입합니다. 명령은 응답이 제공될 때까지 기다립니다.{}yyesfind

도착하다언제나답장 y, 사용

yes | find ... >>file.txt

(또는 -ok로 변경 -exec).

항상 답장하려면 n다음을 사용하세요.

yes n | find ... >>file.txt

원래 명령이 생성하는 코드에는 파일 이름이 그대로 포함되어 있으므로 안전하지 않습니다. 따라서 특수하게 조작된 파일 이름을 사용하여 해서는 안 되는 작업을 수행하는 코드를 생성할 수 있습니다.

관련 정보