我的代码 .sh 无法运行。帮帮我

我的代码 .sh 无法运行。帮帮我
#!/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

在此处输入图片描述

我确保 1234 端口 100% 正在运行。因为我检查了 ps aux|grep ssh 。然后就看到了。那么我的代码有什么问题?谢谢

答案1

当您将其放入 shell 脚本中时,$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”来获取它。

答案2

如果期望不是强制性的,这看起来像是一种发出终止指令的复杂方式

#!/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用 $1 初始化 awk 变量
  • index($0,"...")将在 ps 的当前输出中搜索 ssh

相关内容