Como o shell padrão é tcsh no host remoto, convém iniciar explicitamente um sh shell:
ssh username@servername sh -c 'for FILE in pathToDirectory/*.txt; do grep -q "word1" "$FILE" && grep -q "word2" "$FILE" && echo "$FILE"; done'
Note também que você deve citar duas vezes a expansão da variável $FILE para lidar com nomes de arquivos que possuem caracteres exóticos.
Observe também que, embora você use word1 e word2 com grep , estas são expressões regulares e não palavras . Para procurar palavras em um arquivo, use grep -wF "word" .
Parece que ssh sempre executará o shell de login para executar o comando fornecido no host remoto, e se isso for tcsh , é realmente difícil obter o direito de citar em o script da linha de comando.
Duas soluções (e também não gosto muito):
-
Altere o shell de login no host remoto para um shell semelhante a
sh, comobash,kshouzsh. Faça isso efetuando login no host e executechsh. -
Coloque o script em um arquivo de script e execute-o em
sshcomssh username@servername sh ./script.sh