#!/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

Я уверен, что 100% порт 1234 работает. Потому что я проверяю это ps aux | grep ssh. и посмотреть. Так что не так в моем коде? Поблагодарить

2 ответа2

1

это похоже на сложный способ убийства, если ожидание не является обязательным

#!/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

где

  • -v port=$1 начальная переменная awk с $ 1
  • index($0,"...") будет искать текущий вывод ps для ssh
0

Когда вы поместите это в сценарий оболочки, $ 2 будет заменен аргументом номер 2:

                  v This
./myscript.sh one two

Когда вы запустили свой скрипт, вы не включили второй аргумент.

Тем не менее, это не главное, потому что вы хотите, в частности:

awk '{ print $2 }'

Вы должны экранировать символ «$» с помощью «\».

Это должно работать:

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

В первой строке не было необходимости, так как порт будет первым аргументом, который вы можете использовать для получения $ 1.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .