Por que o comando ls remoto daqui do ssh não funciona dentro de um $ ()? [duplicado]

0

Eu estou tentando contar o número de arquivos em um diretório remoto.
Eu tenho o seguinte código:

ssh server.com<<RUNTHIS  
 FILE_COUNT=$(ls -AU /foo/bar/test_dir) 
 echo "$FILE_COUNT" > ~/file_count.txt   
RUNTHIS

Quando eu executo isso, recebo: ls: /foo/bar/test_dir No such file or directory
Mas o diretório está lá. Se eu fizer ls /foo/bar/test_dir diretamente no servidor, ele listará o diretório.
Também os seguintes trabalhos e salva o conteúdo no arquivo:

ssh server.com<<RUNTHIS  
 ls -AU /foo/bar/test_dir > ~/file_count.txt
RUNTHIS

O que há de errado no primeiro snippet?

    
por Jim 19.10.2017 / 16:54

2 respostas

0

Não funciona porque bash fará a expansão de parâmetros e a substituição de comandos no heredoc . Experimente usar aspas simples em torno de RUNTHIS para protegê-lo.

ssh server.com<<'RUNTHIS' 
 FILE_COUNT=$(ls -AU /foo/bar/test_dir) 
 echo "$FILE_COUNT" > ~/file_count.txt   
RUNTHIS
    
por 19.10.2017 / 17:00
0

O problema é que o seu $ (ls) se expande localmente, em vez de remotamente.

Tente isso ...

ssh -2 -4 -i $key root@$ip -- 'ls -AU /foo/bar/test_dir | wc -l > ~/file_count.txt'
    
por 19.10.2017 / 19:44