Estou enfrentando um problema com SSH em um servidor. A execução de scripts individuais (fonte s01.sh, etc.) funciona bem, com erros exibidos no console. No entanto, ao usar um script mestre para originar esses scripts, a conexão SSH termina inesperadamente ao encontrar um erro. O script mestre master.sh
é o seguinte:
#!/bin/bash
set -e
source s01.sh
source s02.sh
Rscript s03.R
source s04.sh
Eu forneço o script mestre em uma sessão SSH interativa usando
source master.sh
Com set -e, espero que o script pare em erros, mas, em vez disso, está causando a queda de toda a sessão SSH. Isso só acontece com o roteiro combinado, não com o sourcing individual. Por que isso ocorre e como posso evitar que a sessão SSH feche devido a erros de script?
Estou ciente de que isso pode envolver configurações de servidor SSH, mas não tenho certeza de quais configurações investigar.
A razão pela qual isso está acontecendo é porque você está obtendo o script mestre. Posso reproduzir o comportamento que você descreve usando estes dois exemplos de brinquedos:
Agora, se eu abrir um novo terminal e executar
. ~/scripts/foo.sh
(observe quesource
é um alias bash não portátil para o.
comando padrão, então. foo
é o mesmo quesource foo
), o terminal que abri simplesmente sai. E se eu tentar em uma sessão ssh, a sessão ssh será encerrada. Por que? Porque sourcing significa executar os comandos e aplicá-los à sessão atual. Portanto, como um dos scripts causa um erro (o comandofalse
apenas sai com1
), issoset -e
faz com que a sessão seja encerrada. Ele não apenas mata o script porque você disse para ele aplicar os comandos à sessão atual do shell, fornecendo em vez de executar.No entanto, a partir do seu exemplo, parece que você não precisa obter o script mestre, tudo o que você deseja é obter os outros scripts que presumivelmente estão configurando o ambiente necessário para o seu script R. Portanto, basta executar em vez de buscar e você ficará bem:
Ou, se você não o tornou executável:
Veja esta postagem para saber mais sobre sourcing versus execução.