스크립트에서 새 터미널 세션을 열고 상호 작용하려면 어떻게 해야 합니까?

스크립트에서 새 터미널 세션을 열고 상호 작용하려면 어떻게 해야 합니까?

나는 이것을 시도한다:

#!/usr/bin/env sh

name="video.mp4"

ffmpeg -i "$name" -acodec copy output.mp4 | mate-terminal

새로 오픈한 터미널에서 결과를 보고 싶은데 당연히 그렇게 되지는 않겠죠.

답변1

이것이 필요한 것입니다:

mate-terminal -e "bash -c \"ffmpeg -i $name -acodec copy output.mp4;read -p'Press Enter to quit'\""

설명하다: 우리가 원하는 것은 두 개의 명령(그리고 다른 명령도 가능)을 실행하는 것입니다.

ffmpeg -i $name -acodec copy output.mp4
read -p'Press Enter to quit'

그것들을 서로 연결함으로써배쉬-c

bash -c "ffmpeg -i $name -acodec copy output.mp4;read -p'Press Enter to quit'"

이를 메이트 터미널의 맥락에 넣으려면 두 개의 큰따옴표를 모두 이스케이프 처리해야 합니다.

bash -c \"ffmpeg -i $name -acodec copy output.mp4;read -p'Press Enter to quit'\"

컴패니언 터미널-e다음과 같은 경우 하나의 인수를 허용합니다.

mate-terminal -e "bash -c \"ffmpeg -i $name -acodec copy output.mp4;read -p'Press Enter to quit'\""

답변2

확실히 터미널 세션은 셸과 정확히 동일하지 않습니다. 쉘은 명령 해석기이며 터미널 세션은 쉘 [명령 해석기]을 실행하는 새로운 가상 터미널을 엽니다. 터미널 창을 출력을 보고 잠재적으로 셸과 상호 작용할 수 있는 셸 주위의 선택적 래퍼로 생각할 수도 있습니다. 이 창은 일반적으로 실행 중인 셸이 종료되면 닫힙니다.

이 경우에는인터렉티브명령을 실행한 다음 프롬프트로 돌아가서 새 명령을 내릴 수 있는 쉘입니다. ~을 위한스프린트-i, 사용할 매개변수 가 됩니다 .

또는 터미널 에뮬레이터에 다음을 유지하도록 요청할 수 있습니다.창문쉘이 명령 실행을 완료하고 종료된 경우에도 열립니다(상호작용이 없기 때문). 예를 들어, 창을 열어 두는 옵션을 사용하십시오 xterm.-hold

따라서 xterm 예제를 사용하여 이 기능을 적용하려면 다음 명령이 필요합니다.

xterm -hold -e ffmpeg -i "$name" -acodec copy output.mp4

이 매개변수 -e는 마지막 매개변수여야 합니다 xterm.

관련 정보