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
,ksh
ouzsh
. Faça isso efetuando login no host e executechsh
. -
Coloque o script em um arquivo de script e execute-o em
ssh
comssh username@servername sh ./script.sh