Estou procurando uma maneira de ter certeza de que meus comandos são executados pelo bash em algumas máquinas do FreeBSD 11 que usam o csh como shell padrão.
O seguinte é o meu código que funciona no Linux CentOS / Debian / MacOS X / pfSense 2.3 (rodando no FreeBSD 10.3) e até mesmo no Windows 10, mas não funciona no FreeBSD 11
cat "/some/filelist" | ssh -i "/home/user/.ssh/some_key" user@freebsd11 'bash -c "while read -r file; do stat -f \"%N;%c;%m\" \"\$file\"; done | sort"'
A saída do comando anterior no FreeBSD 11 parece ser uma mensagem de erro csh
Unmatched ".
Ao verificar qual shell é executado, parece que o csh é executado. Os seguintes retornos 'csh'
ssh -i /home/user/.ssh/some_key user@freebsd11 'bash -c "echo $0"'
A partir do meu entendimento, os sistemas BSD não permitem a troca de shell, a menos que se use um heredoc, mas não consigo enviar cat "/ some / filelist" usando um heredoc.
Claro, o bash está instalado e pode ser executado.
Eu não estou interessado em mudar o shell padrão dos usuários no FreeBSD.
Alguma ideia aqui?
Meu melhor palpite seria dividir o problema:
1 / envie o arquivo com cat /some/filelist | ssh [..] 'cat > somefile'
2 / use o arquivo enviado em um heredoc
ssh [..] 'bash -s' << 'EOF'
while read -r file; do stat -f "%N;%c;%m" "$file" | sort; done < "$somefile"
'EOF'
Esta solução pode funcionar, mas é confusa, faz 2 conexões em vez de uma e não funcionará se o controle remoto não puder gravar o 'somefile' por algum motivo.