여러 탭과 다양한 명령을 사용하여 새로운 gnome 터미널(v3.28+)을 엽니다.

여러 탭과 다양한 명령을 사용하여 새로운 gnome 터미널(v3.28+)을 엽니다.

Ubuntu 14(v3.6?)와 Ubuntu 18(v3.28)과 함께 제공되는 버전 간에 gnome-terminal 동작에 변화가 있는 것 같습니다.

개발을 위해 여러 디렉터리로 설정된 여러 탭이 있는 새 그놈 터미널을 여는 스크립트가 있으며 현재 첫 번째 탭이 스크립트를 실행합니다. 탭을 사용하여 그놈 터미널을 여는 명령은 다음과 같습니다.

gnome-terminal \
   --tab --command="myscript.sh" \
   --tab --working-directory="<some dir 1>" \
   --tab --working-directory="<some dir 2>" \
   ...

이는 Ubuntu 14(v3.6?)와 함께 제공되는 gnome-terminal 버전에서 완벽하게 작동합니다.

그러나 Ubuntu 18(v3.28)과 함께 제공되는 gnome 터미널 버전에서는 몇 가지 사항이 변경되었습니다.

  1. 해당 옵션을 추가하지 않으면 --window탭이 새 터미널이 아닌 현재 gnome 터미널에서 열립니다. 안타깝게도 이 --window옵션을 추가하면 처음에는 비어 있는 탭이 열립니다. 내가 지정한 탭만으로 새 창을 열 수 있나요?
  2. 이제 다음 알림을 받습니다(이전과 동일하게 작동하지만).

    # Option “--command” is deprecated and might be removed in a later version of gnome-terminal.
    # Use “-- ” to terminate the options and put the command line to execute after it.
    

    이 가이드를 따르도록 스크립트를 변경하면 명령이 모든 탭에 전송되도록 동작이 변경되었습니다. 이전에는 각 탭에 고유한 명령을 적용할 수 있었습니다. 이는 탭별로 별도의 명령을 실행하는 기능이 더 이상 사용되지 않는다는 의미입니까, 아니면 뭔가 빠졌습니까?

최신 그놈 터미널에서 이전 동작을 지원하도록 스크립트를 변경하는 방법에 대한 제안을 주시면 감사하겠습니다.

답변1

그러면 여러 탭이 열립니다. 각 탭을 별도의 줄에 배치하는 것이 더 깔끔할 것이라고 생각합니다. 각 창마다 새 창을 원하면 생략하세요.--tab

---eover/와 가장 큰 차이점 은 --command매개변수에 따옴표가 없다는 점 참고해주세요

gnome-terminal --title "Frontend Web App" --tab --working-directory ~/projects/front-end-app -- npm run serve
gnome-terminal --title "API Server" --tab --working-directory ~/projects/api-server -- ./run-local.sh

답변2

gnome-terminal이 더 이상 사용되지 않는다는 것은 약간 불행한 일입니다 -e. 이로 인해 서로 다른 명령으로 실행되는 여러 탭의 인스턴스를 시작하기가 까다로워집니다. 이것이 내 접근 방식입니다.

launch_project_foo경로 어딘가에 실행 가능한 스크립트를 만들었습니다 . 일반적인 프로젝트 시작 파일은 다음과 같습니다.

#!/bin/bash

BASE_DIR=~/git/ProjectFooBaseDir

cat << EOF > /tmp/bootstrap_tabs.sh
gnome-terminal --tab -t "Docker" --working-directory="$BASE_DIR/backend" -- \
  zsh -is eval "docker-compose up"
gnome-terminal --tab -t "Backend" --working-directory="$BASE_DIR/backend" -- \
  zsh -is eval "npm start"
gnome-terminal --tab -t "Frontend" --working-directory="$BASE_DIR/frontend" -- \
  zsh -is eval "npm start"
gnome-terminal --tab -t "Git" --working-directory="$BASE_DIR"
EOF

gnome-terminal --window --maximize -- bash /tmp/bootstrap_tabs.sh

중요 참고 사항: 이는평가 후크.zshrc, 아래에 설명된 대로.

몇 가지 참고사항:

  • 기본 gnome-terminal호출은 실제로 부팅을 위한 "제로" 탭을 생성하지만 즉시 닫히기 때문에 실제로 관찰할 수는 없습니다. 부팅 스크립트에 sleep을 넣으면 무슨 뜻인지 알 수 있을 것입니다.

  • 변수 대체를 허용하려면 heredoc을 인용해서는 안 됩니다 'EOF'.Bash로 구분된 문서에서 변수 사용.

  • 마지막 탭은 일반 작업을 위한 일반 터미널을 생성합니다.

  • 다른 탭은 프로세스를 직접 시작하지 않습니다. 그렇게 하면 프로세스가 종료되면 탭이 사라지기 때문입니다. 이 문제에 대한 해결책은 다소 쉘에 따라 다릅니다. 여기서는 zsh를 사용하고 있으며 .zshrceval 후크를 피하고 간단히 eg를 사용할 수 있습니다 zsh -ic "<commands>; zsh -i". 그러나 이는 명령이 종료되면 CTRL + C(예를 들어 무한히 실행되는 명령에 일반적임 npm start) 쉘 인스턴스가 종료되기 때문에 전체 탭이 닫히는 단점이 있습니다 . eval 후크를 사용하는 접근 방식은 이를 방지하고 SIGTERM의 경우에도 탭을 열어두는 것을 허용합니다.

  • 명령은 잘 연결되며 실제로 sleep 10; npm start;는 다른 탭(예: docker-compose)의 항목이 준비될 때까지 기다리는 데 이 명령을 자주 사용합니다.

답변3

나는 같은 문제가 있었고 많은 시도 끝에 다음 해결책을 찾았습니다.

gnome-terminal -- bash -c "myCommand -some-args; bash"
gnome-terminal -- bash -c "myOtherCommand -some-args; bash"

답변4

IMHO 가장 좋은 방법은 그놈 터미널을 잊어버리는 것입니다. 대신, 탭 이름과 기타 기능을 유지하는 이전 gnome 터미널의 복제품인 mate 터미널을 설치하십시오.
여기에 각각 하나씩 세 개의 명명된 탭을 생성하는 시작 스크립트가 있습니다. 둘 다 찾을 수 있습니다. 다른 디렉토리에 ...

#!/bin/bash
mate-terminal \
--hide-menubar \
--geometry=130x12+1+800 \
--tab -t "vpn" \
    --tab -t "home" \
    --tab --working-directory="/ddr/buppo/bw/bw-b/sn" -t "sn"

관련 정보