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 터미널 버전에서는 몇 가지 사항이 변경되었습니다.
- 해당 옵션을 추가하지 않으면
--window
탭이 새 터미널이 아닌 현재 gnome 터미널에서 열립니다. 안타깝게도 이--window
옵션을 추가하면 처음에는 비어 있는 탭이 열립니다. 내가 지정한 탭만으로 새 창을 열 수 있나요? 이제 다음 알림을 받습니다(이전과 동일하게 작동하지만).
# 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
--
-e
over/와 가장 큰 차이점 은 --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를 사용하고 있으며
.zshrc
eval 후크를 피하고 간단히 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"