executa comando sobre conexão ssh [duplicata]

1

Eu quero executar o seguinte comando em uma conexão ssh:

tmpValue=$(cat /var/run/jboss-as/jboss-as-standalone8.pid) && top -b -U jboss -n 1 |grep $tmpValue |awk '{print $9}' 

Este comando está funcionando na minha máquina de destino.

Agora eu quero usar este comando de uma máquina diferente e executá-lo via ssh, então o que eu fiz é este:

ssh jboss@myTargetServer tmpValue=$(cat /var/run/jboss-as/jboss-as-standalone8.pid) && top -b -U jboss -n 1 |grep $tmpValue |awk '{print $9}' 

O resultado é

 cat: /var/run/jboss-as/jboss-as-standalone8.pid: No such file or directory
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

O que há de errado com minha ligação?

    
por LStrike 23.05.2016 / 13:31

4 respostas

3

Pode ser mais fácil simplificar o comando para que você tenha menos caracteres especiais nos quais o shell pode se engasgar:

ssh jboss@myTargetServer 'ps -p $(cat /var/run/jboss-as/jboss-as-standalone8.pid) -o %cpu= 2>/dev/null'

O trailing 2>/dev/null elimina o texto do erro, caso o arquivo PID não seja encontrado ou contenha um PID obsoleto.

    
por 23.05.2016 / 18:44
2

Eu recomendaria colocar esses comandos em um script que você chama remotamente com ssh . Caso contrário, você precisaria colocar toda a parte "remota" da linha de comando entre aspas e sair adequadamente de dentro. Isso pode ser entediante e propenso a erros. É por isso que a chamada de script remota.

    
por 23.05.2016 / 13:38
1

O segundo comando que você executa executa a parte do código ( $() ) no subnível local. Você precisa executá-lo do outro lado, escapando caracteres especiais (basicamente $ ):

ssh jboss@myTargetServer tmpValue=\$(cat /var/run/jboss-as/jboss-as-standalone8.pid) \
 && top -b -U jboss -n 1 |grep \$tmpValue |awk '{print $9}'

ou coloque tudo nos apóstrofos ' e escape dos internos:

ssh jboss@myTargetServer 'tmpValue=$(cat /var/run/jboss-as/jboss-as-standalone8.pid) \
 && top -b -U jboss -n 1 |grep \$tmpValue |awk \'{print $9}\''

Eu não testei, mas é a ideia básica do que deve ser feito para corrigir isso.

    
por 23.05.2016 / 17:11
0

Se você realmente reluta em escrever scripts, talvez encontre Documento aqui à mão. Curto disse, você adiciona << SOMETEXMARKER ao final da linha e continua inserindo tantos comandos para o host remoto quanto quiser. Então, na última linha que você entra (no começo da linha) o mesmo SOMETEXTMARKER e que faz com que os comandos inseridos sejam executados remotamente

Aqui está uma amostra

[bobby@bobby ~]$ ssh jimmy@jimmy << MRK '
> # single quote above makes all vars resolve on remote host
> echo remote user and host are : 
> echo $USER $(hostname)
> # entereing closing single quote
> '
> # finally entereing the marker
> MRK
remote user and host are :
jimmy jimmy
    
por 23.05.2016 / 19:39