удар: “команда, не найденная” при назывании функции, определяемой в ~/.bashrc файлом в 'ударе-c', управляет в то время как вводная терминальная гномом вкладка

Что я пытаюсь сделать:

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

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

Описание:

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

open_tabs.sh

#!/bin/bash

gnome-terminal --tab -- bash -c "source $HOME/.bashrc && set-title hey; exec bash"
gnome-terminal --tab -- bash -c "cd ~; exec bash"
gnome-terminal --tab

Когда я выполняю его с ./open_tabs.sh, это открывает 3 новых вкладки, но к сожалению set-title не работает для установки заголовка вкладки! Я получаю эту ошибку на той вкладке, которая открывается:

bash: set-title: command not found

Я имею 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}
}

Как делают я фиксирую это!? Я попробовал exportлуг и sourceлуг и просто не знает то, что я делаю неправильно здесь.

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

  1. Откройте терминал с несколькими вкладками и выполните приложение, которое исключительно изменяет переменную PS1 для каждой вкладки
  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.
    
1
задан 11 February 2020 в 20:42

1 ответ

Заставить удар читать и выполняться ~/.bashrc на запуске запустите его как интерактивную оболочку:

gnome-terminal --tab -- bash -ic "set-title hey; exec bash"

Теперь, почему не сделал Вашего подхода определения источника файла в неинтерактивной работе оболочки? Я сильно принимаю Ваш ~/.bashrc начинается с чего-то вроде этого:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Это позволяет ему return ничего не делая, если оболочка, где это получено, не имеет “меня” нигде в $-, т.е. это - интерактивная оболочка. $- специальный параметр, man bash говорит:

- Расширяется до текущих флагов опции, как указано после вызова, set встроенная команда или установленные самой оболочкой (такой как -i опция).

2
ответ дан 20 February 2020 в 22:56

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

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