Separa o arquivo bashrc para sessões ssh para evitar erros uníssonos

2

Recentemente, meu Unison começou a gerar um erro estranho sempre que eu tentava sincronizar meu laptop com meu PC. Percebi que havia adicionado uma linha em bashrc que imprimia minhas tarefas pendentes sempre que eu abria um terminal.

A linha adicionada no meu bashrc :

task list  #this command comes from a small utility called taskwarrior

O erro está aqui:

Received unexpected header from the server:
 expected "Unison 2.40\n" but received "\nID Proj     Age Description\n-- -------- --- -----------------------------\n 2          11d Do the research work\n 3 Life     11d Get stickynotes from stationary\n 1 Technical 11d Fix the error\n\n3 tasks\n", 
which differs at "\n".
This can happen because you have different versions of Unison
installed on the client and server machines, or because
your connection is failing and somebody is printing an error
message, or because your remote login shell is printing
something itself before starting Unison.

Como mencionado no log de erros, my login shell is printing something itself before starting Unison . Esta é realmente a raiz do problema.

Então, agora tenho duas perguntas:

  1. Como faço para que o meu bashrc imprima a mensagem "lista de tarefas" APÓS o cabeçalho do Unison? Como alternativa, posso fazer as sessões ssh para carregar o arquivo RC separado para que a "lista de tarefas" não seja impressa?

  2. Será seguro imprimir alguma coisa? Quero dizer, se de alguma forma eu conseguir imprimir minha lista de tarefas após o cabeçalho do Unison, será que existe alguma chance de corrupção de dados durante a sincronização, devido às informações adicionais no cabeçalho?

PS: O Unison usa o ssh para comunicação entre os dois sistemas.

    
por shivams 13.05.2015 / 14:46

2 respostas

2

Você pode testar se a saída do script (ou seja, arquivo rc) é um terminal, se não; se for, deve ser seguro enviar o texto e, se não for um terminal, não produzir nada:

if [ -t 0 ]; then
    # check your jobs here and print any info you want to see
fi
    
por 13.05.2015 / 15:40
2

Você pode verificar se a corrente é interativa procurando por i em $- :

if expr "$-" : '.*i' >/dev/null; then
    echo interactive
fi
    
por 13.05.2015 / 16:28