答案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