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


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.