Chame uma função .bashrc a partir de um script shell bash

Chame uma função .bashrc a partir de um script shell bash

Quero poder nomear uma guia de terminal para poder saber qual é qual. Encontrei esta função (aqui) e coloquei no meu .bashrc:

function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$*\a\]"
  PS1=${ORIG}${TITLE}
}

e agora, quando eu chamo, set-title my new tab nameo nome da guia é alterado conforme esperado para "nome da minha nova guia". O problema é que quero abrir uma nova aba e nomeá-la usando set-title. A maneira que tentei fazer isso é assim:

gnome-terminal --geometry=261x25-0+0 --tab -e "bash -c 'set-title tab1; sleep 10'" --tab -e "bash -c 'set-title tab2; sleep 10"

No entanto, agora recebo a seguinte mensagem de erro:

bash: set-title: command not found

E acho que isso tem a ver com a nova aba do gnome .bashrcainda não saber sobre a função.

Como posso fazer isso funcionar?

Responder1

Instantâneo de usar a função, set-titlevocê pode criar um comando com esta funcionalidade, então remova a função set-title()que você adicionou ~/.bashrce crie um arquivo /usr/local/bin/set-title:

#!/bin/bash
echo -ne "\033]0;$1\007"

Adicione chmod: chmod +x /usr/local/bin/set-title. E depois de reabrir o terminal você pode usar este comando: set-title TEST(se você tiver /usr/local/bin/em seu arquivo $PATH).

E então você pode usá-lo ao criar uma nova guia desta forma:

gnome-terminal --geometry=261x25-0+0 \
    --tab -e "bash -c 'set-title TAB1; sleep 10'" \
    --tab -e "bash -c 'set-title TAB2; sleep 10'"

Se de alguma forma você não tiver /usr/local/bin/no seu arquivo $PATH, você pode tentar com o caminho absoluto para o comando set-title:

--tab -e "bash -c '/usr/local/bin/set-title TAB1; sleep 10'"

Responder2

Se você deseja que seus scripts de inicialização .bashrc, .bash_profile, .profile, etc. sejam executados, inicie o gnome-terminal com --logina opção.

informação relacionada