Comportamento estranho de 'sh -c' quando executado por ssh [duplicate]

3

Estou tentando executar alguns comandos em ssh e ficar confuso com o comportamento de sh -c :

ssh myhost sh -c 'echo starting; who -b; date; echo $SHELL'

Saída (nota: a saída do eco é apenas uma linha em branco!)

         system boot  2016-12-22 20:22
Thu Jan 26 06:12:52 UTC 2017
/bin/bash

Sem sh -c , obtenho a saída correta:

ssh myhost 'echo starting; who -b; date; echo $SHELL'

Saída:

starting
         system boot  2016-12-22 20:22
Thu Jan 26 06:18:28 UTC 2017
/bin/bash

Perguntas:

  1. Por que o sh -c não manipula o comando echo starting corretamente? Emite uma linha em branco.
  2. Por que o SHELL está definido como /bin/bash mesmo com sh -c ?
por codeforester 26.01.2017 / 07:23

1 resposta

7

Existem algumas coisas não intuitivas acontecendo aqui.

Primeiro, seu comando para o host remoto é analisado como

(sh -c echo starting); who -b; date; echo $SHELL

As aspas externas são removidas, deixando apenas echo starting em sh , e é por isso que $SHELL está definido como /bin/bash .

Em segundo lugar, "início" não é impresso pelas razões apresentadas nesta resposta: link

No entanto, você pode corrigir esses problemas simplesmente colocando o comando em outro conjunto de citações, deixando-o com

ssh myhost sh -c '"echo starting; who -b ; date; echo $SHELL"'

Embora eu argumente, é mais claro se você mover as aspas simples para abranger o comando sh :

ssh myhost 'sh -c "echo starting; who -b ; date; echo $SHELL"'
    
por 26.01.2017 / 07:52