ssh e encontre a mudança de caminho

0

Eu estou tentando ssh para um servidor remoto e, em seguida, mudei uma parte do caminho durante a pesquisa assim:

DIRS="dir1 dir2 dir3 dir4"      
ssh [email protected] 
         for D in $DIRS ;
         do
         "/User/$D/$Specified_file"
              if [ -e $Specified_file ] ;
                 then
                 cat $Specified_file
              fi
          done

Mas meu problema é que o shell faz o ssh e então procura localmente pelo arquivo especificado.

O que estou fazendo de errado aqui? Por favor, assuma que o $Specified_file é alcançável e inserido corretamente.

    
por Matt 08.06.2017 / 16:58

1 resposta

1

Com base nos seus comentários, eu acho que você pode querer algo assim:

dirs="/dir1 '/path/with spaces/in it' /foo/dir3 '/another/path/with space'"
file="name with spaces maybe"

ssh user@server "find $dirs -maxdepth 1 -name \"$file\""

Eu usei find em vez de for e if . Mente as citações (e barras invertidas), elas são importantes. Podemos escrever com for etc. mas seria menos elegante. Se você precisar que seja feito dessa maneira, me avise.

Atenção: preste atenção às suas variáveis porque você pode injetar um comando, por exemplo:

file='dummy name" ; rm "very important file" ; echo "'

O principal problema com o seu código foi que ssh não recebeu nenhum comando para executar no lado remoto. Todas as linhas depois foram tratadas como comandos locais.

Meu código se expande para o seguinte comando a ser executado no lado remoto:

find /dir1 '/path/with spaces/in it' /foo/dir3 '/another/path/with space' -maxdepth 1 -name "name with spaces maybe"

Ele procura arquivos com o nome dado nos diretórios fornecidos (não decrescente para os subdiretórios graças a -maxdepth 1 ) e imprime seus caminhos.

    
por 13.06.2017 / 18:01

Tags