Откройте терминал с несколькими вкладками и выполните приложение, которое исключительно изменяет переменную PS1 для каждой вкладки

Что я пытаюсь сделать:
  1. Запишите сценарий для открытия 3 вкладок.
  2. cd в другую папку на каждой вкладке (т.е.: выполните уникальную команду).
  3. заставьте каждую вкладку иметь уникальный заголовок путем изменения его локального PS1 переменная
  4. Удостоверьтесь, что каждая вкладка остается открытой после того, как скрипт запущен

Я хочу, это написало сценарий так, я могу нажать сценарий на свой Рабочий стол и иметь его, открывают терминалы, как я хотел бы за свою ежедневную среду разработки.

Описание:

У меня есть этот сценарий, чтобы попытаться открыть 3 терминальных вкладки с уникальными командами, которые будут выполнены на вкладках:

open_tabs.sh

#!/bin/bash

gnome-terminal --tab -- bash -ic "set-title title 1; exec bash"
gnome-terminal --tab -- bash -ic "cd ~; set-title title 2; exec bash"
gnome-terminal --tab

Когда я выполняю его с ./open_tabs.sh, это открывает 3 новых вкладки, но к сожалению set-title не работает для установки заголовка вкладки! Это появляется PS1 переменная не остается установленной с моим set-title звонить. exec bash есть ли для хранения вкладки открытой, на этот ответ и комментарии под ним.

Я имею set-title определенный как функция в ~/.bashrc как это. Его цель состоит в том, чтобы установить строку заголовка наверху любого окна терминала. Это работает отлично, когда я использую его вручную. Исключая: set-title hey how are you? поместит "эй как дела?" наверху моего окна терминала.

# From: https://unix.stackexchange.com/questions/177572/how-to-rename-terminal-tab-title-in-gnome-terminal/566383#566383
set-title() {
    # If the length of string stored in variable `PS1_BAK` is zero...
    # - See `man test` to know that `-z` means "the length of STRING is zero"
    if [[ -z "$PS1_BAK" ]]; then
        # Back up your current Bash Prompt String 1 (`PS1`) into a global backup variable `PS1_BAK`
        PS1_BAK=$PS1 
    fi

    # Set the title escape sequence string with this format: `\[\e]2;new title\a\]`
    # - See: https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Customizing_the_terminal_window_title
    TITLE="\[\e]2;$@\a\]"
    # Now append the escaped title string to the end of your original `PS1` string (`PS1_BAK`), and set your
    # new `PS1` string to this new value
    PS1=${PS1_BAK}${TITLE}
}

Как я фиксирую это так, чтобы каждая вкладка выполнила команду, установила ее заголовок путем изменения ее PS1 переменная, и остается открытой?

Отметьте это gnome-terminal удержал от использования --title и --command опции, следовательно эти обходные решения.

Похожие страницы:

  1. удар: "команда, не найденная" при назывании функции, определяемой в ~/.bashrc файлом в 'ударе-c', управляет в то время как вводная терминальная гномом вкладка
  2. https://unix.stackexchange.com/questions/177572/how-to-rename-terminal-tab-title-in-gnome-terminal/566383#566383
  3. Откройте Terminal с несколькими вкладками и выполните приложение <==, это - то, что я действительно пытаюсь решить, но gnome-terminal --command (-e) опция теперь удерживается от использования!

    # 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.
    
  4. Как запустить скрипт, не закрывая терминал?

2
задан 11 February 2020 в 20:41

2 ответа

Как имеет место с большей частью программирования, решение проблемы было чрезвычайно трудно. Я должен был изучить набор о переменных Bash, и как использовать export и source (или POSIX отмечает точкой оператор, .), и как удар загружается, и что интерактивный -i режим удара был и т.д. и т.д.

Я нашел man bash и man test также быть полезным. Вот то, как сделать то, что я хочу сделать, который является:

  1. Запишите сценарий для открытия 3 вкладок.
  2. CD в другую папку на каждой вкладке (т.е.: выполните уникальную команду).
  3. заставьте каждую вкладку иметь уникальный заголовок путем изменения его локальной переменной PS1
  4. Удостоверьтесь, что каждая вкладка остается открытой после того, как скрипт запущен

1-й, добавьте это к нижней части Вашего ~/.bashrc файл:

# Function to allow a user to arbitrarily set the terminal title to anything
# Example: `set-title this is title 1`
set-title() {
    # Set the PS1 title escape sequence; see "Customizing the terminal window title" here: 
    # https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Customizing_the_terminal_window_title
    TITLE="\[\e]2;$@\a\]" 
    PS1=${PS1_BAK}${TITLE}
}

# Back up original PS1 Prompt 1 string when ~/.bashrc is first sourced upon bash opening
if [[ -z "$PS1_BAK" ]]; then # If length of this str is zero (see `man test`)
    PS1_BAK=$PS1 
fi

# Set the title to a user-specified value if and only if TITLE_DEFAULT has been previously set and
# exported by the user. This can be accomplished as follows:
#   export TITLE_DEFAULT="my title"
#   . ~/.bashrc
# Note that sourcing the ~/.bashrc file is done automatically by bash each time you open a new bash 
# terminal, so long as it is an interactive (use `bash -i` if calling bash directly) type terminal
if [[ -n "$TITLE_DEFAULT" ]]; then # If length of this is NONzero (see `man test`)
    set-title "$TITLE_DEFAULT"
fi

2-й, создайте этот сценарий для открытия 3 уникальных вкладок с 3 уникальными командами CD и 3 уникальными заголовками:

open_tabs.sh:

gnome-terminal --tab -- bash -ic "export TITLE_DEFAULT='title 1'; cd ..; exec bash;"
gnome-terminal --tab -- bash -ic "export TITLE_DEFAULT='title 2'; cd ../..; exec bash;"
gnome-terminal --tab -- bash -ic "export TITLE_DEFAULT='title 3'; cd ../../..; exec bash;"

Теперь откройте терминал и работайте open_tabs.sh сценарий:

./open_tabs.sh

Вуаля! Это волшебно! Эти 3 новых вкладки теперь показывают наверху моего терминала, и каждый сделал надлежащее cd управляйте, чтобы я установил, и у каждого есть надлежащий заголовок, который я установил!

enter image description here

Это будет все помещено в мой dotfiles проект: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.

Полное и конечное решение: посмотрите здесь: Откройте Terminal с несколькими вкладками и выполните приложение

0
ответ дан 20 February 2020 в 22:55

Я думаю, что необходимо использовать & заставить Ваши процессы работать в фоне.

https://www.tecmint.com/run-linux-command-process-in-background-detach-process/

-1
ответ дан 20 February 2020 в 22:55

Другие вопросы по тегам:

Похожие вопросы: