Meu código .sh não pode ser executado. Ajude-me

0
#!/usr/bin/expect -f
set port [lindex $argv 0]
spawn ps xu | grep "ssh -f -N -o ConnectTimeout=5 -D $port" | grep -v grep | awk '{ print $2 }' | xargs kill -9
expect eol

Eu me certifico de que 100% da porta 1234 esteja em execução. Porque eu verifiquei ps aux | grep ssh. e veja. Então, o que está errado no meu código? Obrigado

    
por Edward Trọng 29.07.2016 / 08:39

2 respostas

0

Quando você coloca isso em um shell script, o $ 2 será substituído pelo argumento número 2:

                  v This
./myscript.sh one two

Quando você executou seu script, não incluiu um segundo argumento.

No entanto, isso é além do ponto, porque você quer, especificamente:

awk '{ print $2 }'

Você precisa escapar do símbolo '$' com '\'.

Isso deve funcionar:

#!/bin/bash
spawn ps xu | grep "ssh -f -N -o ConnectTimeout=5 -D $1" | grep -v grep | awk '{ print \ }' | xargs kill -9

A primeira linha não foi necessária, já que a porta será o primeiro argumento que você pode usar '$ 1' para obtê-la.

    
por 29.07.2016 / 09:37
1

isso parece uma maneira complexa de emitir um kill, se esperar não for obrigatório

#!/bin/bash
ps xu |awk -v port=$1 'index($0,"ssh -f -N -o ConnectTimeout=5 -D " port) > 0 { printf "kill %d\n",$2}' | bash

onde

  • -v port=$1 variável awk inicial com $ 1
  • index($0,"...") pesquisará a saída atual de ps para ssh
por 29.07.2016 / 10:17