Como tornar a chamada .bashrc dependente do programa tmux sendo instalado?

3

Eu tenho uma seção no meu .bashrc que aciona o programa tmux (multiplexador de terminal).

No entanto, se o programa tmux não estiver instalado (digamos que estou configurando um novo computador), tê-lo no meu arquivo .bashrc impede que qualquer janela do terminal seja aberta com êxito.

É claro que instalar o tmux corrige isso, mas isso não é problema meu.

Como posso tornar isso condicional para que, se o tmux não estiver instalado, ele não apague / dê uma mensagem de erro?

Atualmente, tenho:

if [[ ! $TERM =~ screen ]]; then
  exec tmux
fi

Eu quero algo como:

if tmux; then
  if [[ ! $TERM =~ screen ]]; then
    exec tmux
  fi
fi

mas isso me dá

The program 'tmux' is currently not installed.  You can install it by typing:
sudo apt-get install tmux

Embora pelo menos me dê um prompt de terminal em vez de fechar a janela! Além disso, se / quando o tmux estiver instalado, isso não causa nenhum erro / causa qualquer problema ao abrir uma nova janela de terminal.

    
por Michael Durrant 04.08.2013 / 14:55

2 respostas

6

Você pode usar o comando type para ver se o executável está presente em sua caixa:

if [ -n "$(type -P tmux)" ]; then

    ...tmux is installed...

else

    ...tmux isn't installed...

fi

Eu usei esse snippet de código com frequência para fazer isso:

$ [ -n $(type -P tmux) ] && echo "installed" || echo "not installed"
installed

Eu posso fingir usando a alternativa para -n (não string vazia), -z (string vazia).

$ [ -z $(type -P tmux) ] && echo "installed" || echo "not installed"
not installed
    
por 04.08.2013 / 15:16
1

Ou, se tudo o que você quer fazer é decidir em qual executável disparar, você pode fazer isso:

executable=$(type -P tmux)
executable=${executable:-xterm} # For example
exec $executable

A expansão var=${var:-string} atribui o valor "string" a var se e somente se nada foi atribuído a var antes.

    
por 04.08.2013 / 15:21