Iniciando várias janelas de tela a partir do script de shell usa configuração incorreta

1

Ao executar o Screen, eu posso usar Ctrl + um c para criar uma nova janela e executar o vim em cada janela. Também da tela, eu posso executar o comando screen vim várias vezes para abrir novas janelas com o vim já em execução. Estes funcionam como esperado. No entanto ...

Se eu colocar o comando várias vezes em um script, como:

#!/bin/bash
screen vim
screen vim
screen vim

... e execute esse script a partir da Tela, o primeiro comando será executado como esperado, mas o segundo e os seguintes não serão executados.

As coisas que notei são:

  1. A janela 2 e além não tem stty -ixon aplicado, que eu defini em .bashrc
  2. Se eu não tiver colorscheme definido explicitamente em .vimrc, ele usará um esquema na janela 1 e outro em todas as janelas seguintes
  3. Às vezes, um comando será ignorado, ou seja, às vezes apenas duas novas janelas serão abertas, onde o script foi definido para abrir três
  4. Se eu fizer um :windowlist , a janela 2 e a seguir não terão o sinalizador de login definido (executando screen vim diretamente definirá esse sinalizador), por exemplo,
Num Name Flags
  0 bash     $
  1 vim      $  <-- running the script from window 0 opened 1..3 (no flag on 2 or 3)
  2 vim
  3 vim
  4 vim      $  <-- manually running 'screen vim' from window 0 always sets the flag
  1. O uso de Ctrl + a L em uma janela que não está conectada retornará a mensagem This window is not logged in e o sinalizador não será configurado. Pressionar as teclas novamente alternará entre o login e o logoff (embora stty -ixon etc 'ainda não seja aplicado)
  2. A execução de htop mostrará todas as instâncias do vim (incluindo aquelas que não estão conectadas) em execução no meu usuário.

Por que a abertura manual de várias janelas aplica minhas configurações corretamente, mas o uso de scripts não?

Eu sou novo no Linux e não tenho certeza se estou fazendo algo bobo aqui.

    
por Eliott 14.01.2018 / 08:11

1 resposta

0

Acredito que descobri que o problema é causado pelo script executando todos os comandos (exceto o primeiro) em segundo plano. Eu posso forçar o primeiro comando a ter o mesmo problema, bifurcando-o com & .

Depois de não conseguir encontrar uma maneira de fazer o script executar cada comando em primeiro plano, um após o outro, eu encontrei uma solução alternativa ...

Eu posso colocar todos os comandos em um arquivo screenrc personalizado (por exemplo, my_screenrc) como tal:

# Import default screenrc
source ${HOME}/.screenrc

# Run screen-specific commands (not bash ones)
screen     # Run bash in window 0
screen vim # Run vim in windows 1 through 3 (with correct settings)
screen vim
screen vim

Eu posso então executar isso do bash com:

screen -c my_screenrc
    
por 26.01.2018 / 06:24