다양한 터미널 에뮬레이터의 새 인스턴스에서 명령 열기

다양한 터미널 에뮬레이터의 새 인스턴스에서 명령 열기

복합 명령을 전달하는 동시에 터미널 에뮬레이터를 열려고 합니다. 이를 수행하기 위한 명령은 무엇입니까(두 가지 버전: 완료 후 터미널이 열려 있는 위치 또는 닫히는 위치)?


예를 들어, xterm터미널 에뮬레이터의 경우 이 명령은 xterm -e "ls; sleep 3"xtermGUI 창을 만들고, 현재 디렉터리를 나열하고, 3초 동안 기다린 다음 창을 닫습니다.

특히 Windows의 gnome-terminal, konsole, lxterminal, rxvt, terminator, xfce4-terminal및 에 대한 호출에 관심이 있습니다 .xtermcmd


지금까지 제가 알아낸 내용의 몇 가지 사용 예는 다음과 같습니다.

Emulator        |  Invocation (Exiting)              |  Invocation (Persistent)           |
----------------+------------------------------------+------------------------------------+
cmd             |  start CMD /C "DATE /T & TIME /T"  |  start CMD /K "DATE /T & TIME /T"  |
gnome-terminal  |  ???                               |  ???                               |
konsole         |  ???                               |  ???                               |
lxterminal      |  ???                               |  ???                               |
rxvt            |  ???                               |  ???                               |
terminator      |  ???                               |  ???                               |
xfce4-terminal  |  ???                               |  ???                               |
xterm           |  xterm -e "ls; sleep 3"            |  xterm -e "ls; sleep 3; bash"      |

더 많은 내용을 작성하도록 도와줄 수 있는 사람이 있나요? 부분적인 답변을 환영합니다.

답변1

를 제외하면 cmd모두 X 터미널 에뮬레이터이며 대부분은 xterm -e옵션의 일부 변형을 제공합니다. 차이점은 옵션 가치를 인용해야 하는지 여부에 있습니다.

쉘 제한 외에도 xterm은 다음을 사용합니다.모두-e명령의 일부로 과거 토큰 . 표시된 대로 인용할 필요가 없습니다(하나의 토큰이 됩니다). rxvt는 해당 동작을 따릅니다(참조:선적 서류 비치).

명령이 셸에 전달되는 방식에 따라 미묘한 차이도 있습니다. xterm은 그 중 일부를 문서에 기록합니다.수동("쉘" 및 "필터"를 찾으십시오) 다른 것 중 어느 것도 해당 수준의 세부 정보를 제공하지 않습니다. 당신은 찾을 수 있습니다저것들소스 코드를 읽거나 테스트하여.

에 따르면선적 서류 비치-e, konsole은 또한 xterm(일반적인 규칙)의 동작을 따릅니다 .

gnome-terminal은 관례와 다릅니다(참조:선적 서류 비치):

--command명령, -e명령

실행명령시작 시 명령.

--execute명령 ARGS, -x명령 ARGS

명령을 실행합니다.명령그 주장으로ARGS시작에. 이 인수 이외의 인수는 터미널에서 처리되지 않습니다. 이 동작은 xterm -e 동작과 유사합니다.

즉, 해당 -e옵션에는 단일 토큰이 필요합니다. 호환성을 제공하기 위해 이를 수정하는 대신 개발자는 다음을 제공하기로 결정했습니다.비슷한옵션 이름이 다른 기능.

다른 것들은 gnome-terminal과 거의 동일한 코드를 사용하며 공유 정도에 따라 -e다른 것과 같이 구현하거나 gnome-terminal에서 복사할 수도 있습니다.

lx터미널

-e--command=--command

이 옵션은 터미널에서 실행될 프로그램(및 해당 명령줄 인수)을 지정합니다. --command= 형식을 제외하고 이는 명령줄의 마지막 옵션이어야 합니다.

터미네이터선적 서류 비치그놈 터미널과 일치

xfce4 터미널선적 서류 비치lxterminal과 일치합니다.

답변2

내가 겪은 주요 문제는 대부분의 터미널 에뮬레이터에서 명령 인수가 단일 항목으로 예상된다는 것입니다(즉, 셸 스타일 구문 분석이 없음). 예를 들어

rxvt -e "ls; sleep 3"

xterm호출된 것과 동일한 방식인데도 실패합니다 .

인용을 해제하려고 하면 작동하지 않습니다. 예를 들어:

rxvt -e ls; sleep 3

두 명령으로 별도로 구문 분석되고 실행됩니다.

rxvt -e ls
sleep 3

내가 찾은 트릭을 사용하여여기, 터미널 에뮬레이터를 호출하여 를 실행한 bash다음 bash에뮬레이터 대신 의 인터프리터에 명령을 전달할 수 있습니다. 이는 문제를 해결하고 더 일관된 동작을 제공합니다. 모든 경우에 bash기본 명령 문자열을 구문 분석하기 때문입니다.

내가 찾은 트릭을 사용하여여기bash, for 를 호출 xterm하여 쉘을 열어두고 영구 변형을 생성할 수 있습니다.

rxvt -e bash -c "ls;sleep 3;bash"

이것은 konsole, lxterminalterminator에서도 작동합니다( terminator적어도 지원하는 -x것 같습니다). 그러나 그것에 대해 생각해 보면(또는 gnome-terminal의 동등한 것을 사용한 -x다음 창을 닫으려고 할 때 경고를 관찰하면) 터미널이 실행 중이고 bash그것이 bash실행 중이 라는 것을 깨닫게 됩니다 bash. 대신에 당신은바꾸다-that's bash-go-to-ter는 bash-that-won't로 종료됩니다.

rxvt -e bash -c "ls;sleep 3;exec bash"

야생에서 볼 수 있는여기.

메모대안는 다른 터미널(예: 's xterm) -hold에 해당하는 옵션 입니다 . 보류 옵션은 터미널 에뮬레이터가 닫히는 것을 방지하지만 상호 작용을 다시 제공하지는 않습니다. 이것은 실제로 내가 찾던 것이 아니었지만 완전성을 위해 아래에 나열했습니다.konsole--hold

다음은 표입니다(이러한 명령이 점점 길어지고 있으므로 형식이 다릅니다). 나는 또한 추가했습니다 urxvt. 모든 호출이 테스트되었습니다.

Emulator       | Command Type        | Invocation                                      
---------------+---------------------+-------------------------------------------------
cmd            | exiting             | start CMD /C "DATE /T & TIME /T"                
               | persistent          | ???                                             
               | persistent (inter.) | start CMD /K "DATE /T & TIME /T"                
---------------+---------------------+-------------------------------------------------
gnome-terminal | exiting             | gnome-terminal -x bash -c "ls;sleep 3"          
               | persistent          | ???                                             
               | persistent (inter.) | gnome-terminal -x bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
konsole        | exiting             | konsole -e bash -c "ls;sleep 3"                 
               | persistent          | konsole --hold -e bash -c "ls;sleep 3"          
               | persistent (inter.) | konsole -e bash -c "ls;sleep 3;exec bash"       
---------------+---------------------+-------------------------------------------------
lxterminal     | exiting             | lxterminal -e bash -c "ls;sleep 3"              
               | persistent          | ???                                             
               | persistent (inter.) | lxterminal -e bash -c "ls;sleep 3;exec bash"    
---------------+---------------------+-------------------------------------------------
rxvt           | exiting             | rxvt -e bash -c "ls;sleep 3"                    
               | persistent          | ???                                             
               | persistent (inter.) | rxvt -e bash -c "ls;sleep 3;exec bash"          
---------------+---------------------+-------------------------------------------------
terminator     | exiting             | terminator -x bash -c "ls;sleep 3"              
               | persistent          | ???                                             
               | persistent (inter.) | terminator -x bash -c "ls;sleep 3;exec bash"    
---------------+---------------------+-------------------------------------------------
urxvt          | exiting             | urxvt -e bash -c "ls;sleep 3"                   
               | persistent          | urxvt -hold -e bash -c "ls;sleep 3"             
               | persistent (inter.) | urxvt -e bash -c "ls;sleep 3;exec bash"         
---------------+---------------------+-------------------------------------------------
xfce4-terminal | exiting             | xfce4-terminal -x bash -c "ls;sleep 3"          
               | persistent          | xfce4-terminal --hold -x bash -c "ls;sleep 3"   
               | persistent (inter.) | xfce4-terminal -x bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
xterm          | exiting             | xterm -e "ls;sleep 3"                           
               | persistent          | xterm -hold -e "ls; sleep 3"                    
               | persistent (inter.) | xterm -e "ls;sleep 3;exec bash"                 

내가 생각하지 않는 나머지 물음표는 가능하지 않습니다.

새 터미널, 새 호출 또는 수정 사항이 있으면 이 표를 자유롭게 편집하세요.

관련 정보