2014-03-26 3 views
0

DVD 제작을 자동화하기 위해 bash 스크립트를 작성하고 있습니다. (주로, 더 많은 bash 스크립팅을 배울 수 있습니다.) 그리고 제어가 가능한지 알아 내려고하고 있습니다. exterrnal 명령이 출력을 나타내는 방법.Bash - 외부 명령의 출력을 제어합니다.

예를 들어, ffmpeg의 출력은 옵션, 라이브러리, 스트림, 진행 상황 등과 관련이있는 (나에게) 관련성없는 cruft의로드입니다.

정말로 원하는 것은 입력 및 출력 파일 이름이있는 행만 표시하도록 선택할 수 있고 매번 같은 줄에 진행률을 표시 할 수 있습니다. mkisofs 및 wodim에서도 마찬가지입니다.

저는 인터넷 검색을 시도해 보았습니다. 가능하지 않거나 아무도 생각하지 않았다고 생각하기 시작했습니다. (또는, 아마도 아무도 그 방법을 말하지 않아도된다는 것을 분명히 알 수 있습니다 .-)). 사전에

많은 감사를,

데이비드 쇼

+2

출력 내용이 어떻게 생겼는지, 어떤 모습으로 보이는지 몇 가지 예를 들어 주시겠습니까? –

+1

매우 가능합니다. 'sed','awk' 또는'grep'을 사용해보십시오 :'bash script.sh | grep ' –

+0

[ffmpeg -loglevel] (https://ffmpeg.org/ffmpeg.html)을 변경해 보셨습니까? 기본값은 * "info - 처리 중에 유익한 메시지를 표시합니다. 이것은 경고 및 오류 외에도 있습니다."*. * "quiet - 전혀 아무것도 보여주지 말고 침묵하십시오."* –

답변

2

당신은 그렙 및 파이프를 사용하고 싶습니다. 그들은 당신의 친구입니다. ffmpeg의 출력을 grep에 파이프하고 원하는 텍스트가 포함 된 줄만 출력하려고합니다. '\ |'

당신이 명령 줄 인수 $ 1, 쉘 스크립트에서 $ 2와 입력 및 출력 파일 이름이 가정, 당신은

 
ffmpeg .... | grep "$1\|$2" 
      ^  ^
      |   +-- escape and OR character 
      +--pipe character 

처럼 뭔가를 시도 할 수 있습니다 정규식에 대한 이스케이프 및 OR 문자입니다. OR '|' 또한 파이프 문자이므로 이스케이프 처리해야합니다.

이렇게하면 찾고있는 파일이 포함 된 출력 행만 출력됩니다.

모든 출력이 stdout을 사용한다고 가정합니다. ffmpeg가 stderr을 통해 텍스트를 출력하는 경우 ffmpeg 줄 끝 부분에 일부 리디렉션을 추가하여 다시 표준 출력으로 리디렉션해야합니다.

편집 : 첫 번째 예에서는 잘못된 인용 부호를 사용했습니다. 큰 따옴표를 사용하면 매개 변수 $ 1 및 $ 2가 확장되지 않습니다.

관련 문제