여러 터미널 탭 열기 및 명령 실행


9

여러 개의 터미널 탭을 열고 제목을 지정하고 디렉토리로 이동하여 각 탭을 명령으로 실행해야합니다.

나는 리눅스와 쉘 스크립팅을 처음 했고 온라인으로 검색하고 일부 솔루션을 확인한 후이 스크립트를 만들었습니다 ( 아래 답변을 기반으로 EDITED ).

#!/bin/bash

cd /media/Extra/Project

tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)

cmds[1]="'rails s'"
titles[1]="Server"

cmds[2]="'rails c'"
titles[2]="Console"


for i in 1 2; do
  options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" )          
done

gnome-terminal "${options[@]}"


exit 0

탭을 열고 이름을 지정하지만이 오류를 생성하는 명령을 실행하지 못합니다.

이 터미널에 대한 자식 프로세스를 만드는 중 오류가 발생했습니다

또 다른 단점은 실행중인 명령을 중단하면 원하지 않는 탭을 닫는 것입니다. 명령을 중지하고 동일한 탭에서 다시 실행할 수 있어야합니다.

스크립트에 어떤 문제가 있습니까? 다른 간단한 방법이 있습니까?

참고 : 명령에서 (-e "\"bash -c $ {cmds [i]}; bash \ "") 부분을 제거한 경우 지정된 디렉토리에서 탭을 열고 오류없이 이름을 지정합니다.

편집 -1 :

아래 @Tuknutx 응답을 적용하고 스크립트를 편집 한 후 오류가 더 이상 나타나지 않지만, 저를 제공 bash: rails c: command not found하고 rails s이 폴더에 액세스하면, 나는 gemset을 선택 .rmvrc 사용하고 새로운 레일은 레일 서버를 시작하는 대신되는 앱 생성 .


스크립트를 우분투 부팅에서 실행하려면 :- 시작 서비스 ( help.ubuntu.com/community/UbuntuBootupHowto ) 로 스크립트를 실행 하거나 데스크탑 환경에서 "시작 응용 프로그램"을 사용하여 스크립트를 실행할 수 있습니다
Aboelnour

내가 쓰면 cmds[1]="'ping 192.168.9.9'"같은 오류가 발생하지만 작은 따옴표를 제거하여 해결했습니다. 그래서 내가 쓴다면 cmds[1]="ping 192.168.9.9"작동합니다.
데이지

@Brary 그러나 왜 세 개의 탭을 여는 지 이해하지 못합니다. 하나는 기본값이고 다른 하나는 스크립트에서 설정합니다. 우리가 정의하기 때문에 tab=" --tab-with-profile=Default"??
데이지

답변:


3

tmuxwith를 사용 하는 것이 좋습니다. tmuxinator이 작업을 수행하고 terminator레이아웃 을 사용할 수도 있습니다!

대한 terminator레이아웃 체크 아웃 mhnagaoka의 대답은 여기 askubuntu 너무 :

  1. 레이아웃을 설정 한 후 터미널 배경을 마우스 오른쪽 버튼으로 클릭하고 환경 설정레이아웃 탭을 선택 하고 추가 버튼을 클릭하십시오 .

  2. 이름을 지정하고 닫기를 누르 십시오 .

  3. 언급 된 ~/.config/terminator/config파일을 작성해야 합니다.

  4. 이제 다음을 사용하여 저장된 레이아웃을 사용하여 터미네이터를 시작할 수 있습니다 terminator -l yourLayout( 2 단계에서 선택한 항목으로 yourLayout바꿉니다 ).

  5. (선택 사항)~/.config/terminator/config 파일이 [layouts]아래에 표시되고 그 아래에 중첩 되도록 파일을 편집하여 yourLayout의[[yourLayout]] 이름 을 기본값으로 바꾸고 이전의 기본 레이아웃을 제거 / 이름 바꾸기하십시오 . 이제 터미네이터가 매개 변수없이 시작되면 사용자 지정 레이아웃 을로드합니다 ![[default]]


2

몇 가지 다른 답변과 의견을 요약하면 다음과 같습니다.

#!/bin/bash

cd /path/of/my/stuff

tab=" --tab"
options=()

cmds[1]="echo Banana"

cmds[2]="echo Cat"


for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done

gnome-terminal "${options[@]}"

exit 0

'마스터'탭, 프로필 및 제목 (에서 더 이상 사용되지 않는 것으로 gnome-terminal표시됨)을 제거했습니다.


$tab -e... Option “-e” is deprecated and might be removed in a later version of gnome-terminal.` 의 결과는 “-”를 사용하여 옵션을 종료하고 명령 행을 실행하여 실행합니다. . that's an output but the comands get executed. When i use $ tab-`명령이 실행되지 않고 터미널 dsisplays :There was an error creating the child process for this terminal. Failed to execute child process “bash -c 'echo Banana ; bash'” (No such file or directory)
nyxee

1

이 시도:

options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" ) 

그렇지 않으면 -e 뒤의 전체 표현식이 명령으로 해석됩니다.

.bashrc의 별칭을 포함하려면 -ic대신c


더 이상 오류가 표시되지 않습니다. 감사합니다. 그러나 그것은 나에게 bash: rails c: command not found'rails s'를 제공하여 rails 서버를 시작하는 대신 새로운 rails 앱을 만듭니다. 이 질문의 범위를 변경, 나는 스크립트에 대한 수정으로 편집합니다
Brary

rails c다른 것없이 터미널에서 시도하면 효과가 있었습니까 ? 아마도 그럴까요 rails -c?
TuKsn

효과가 없었습니다. 나는 심지어 시도 rvm list gemsets했고 그것은 No command 'rvm' found.. 명령 rvm list gemsets을 실행하지 않고 열리는 첫 번째 탭에서 동일한 명령 을 실행하면 효과가 있다고 말합니다 ! 환경이로드되고 .rvmrc 파일이로드되기 전에 명령을 실행합니까?
Brary

1

-e 옵션을 제공하는 인수 "bash -c command; bash"는 따옴표를 포함합니다. 전체 문자열을 명령 이름으로 해석합니다! 대신 이것을 시도하십시오 : -e "bash -c 'command ; bash'". 이 방법으로 터미널 창에서 실행되는 것은이며 command, 실행 후에는 원하는 쉘 쉘이 제공됩니다. 또한, 당신은 또한 말할 수 있습니다 'command & bash'; 그러면 백그라운드에서 명령이 실행되고 딸 셸이 즉시 제공됩니다.


나는 이것을 options+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )로 바꾸었고 options+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )나에게 같은 오류가 발생했다 .. 내가 올바르게하고 있습니까?
Brary

정확하지 않은 경우 : 첫 번째 bash 앞에 \ "를 제거하고 두 번째 bash 뒤에 '뒤에 \"를 제거하십시오.
Silvio Levy

고맙게도 질문을 편집하고 레일과 rvm을 포함하도록 범위를 변경했습니다.
Brary
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.