Bash netcat在while read循环中立即返回
我正在为自己制作一个菜单,因为有时我需要搜索(或NMAP哪个端口)。 我希望执行与在命令行中运行命令相同的操作 下面是我的一段代码:Bash netcat在while read循环中立即返回,bash,shell,Bash,Shell,我正在为自己制作一个菜单,因为有时我需要搜索(或NMAP哪个端口)。 我希望执行与在命令行中运行命令相同的操作 下面是我的一段代码: nmap $1 | grep open | while read line; do serviceport=$(echo $line | cut -d' ' -f1 | cut -d'/' -f1); if [ $i -eq $choice ]; then echo "Running command: netcat $1 $serv
nmap $1 | grep open | while read line; do
serviceport=$(echo $line | cut -d' ' -f1 | cut -d'/' -f1);
if [ $i -eq $choice ]; then
echo "Running command: netcat $1 $serviceport";
netcat $1 $serviceport;
fi;
i=$(($i+1));
done;
在使用nmap扫描所有内容后,它将立即关闭。请勿将FD 0(stdin)用于读取循环和netcat。如果不区分这些流,netcat
可以使用nmap | grep
管道发出的内容,而不是让read
读取这些内容
这会产生一些不良影响:while/read循环的其他部分不会执行,netcat
会看到一个关闭的stdin流,并在管道的内容被消耗时退出(因此,如果您正试图实现这一点,则无法获得netcat的交互控制)。解决此问题的一个简单方法是将nmap管道的输出输入到非默认文件描述符中;下面,我使用的是FD3
这个代码超出了问题的范围,有很多错误,所以请不要考虑我复制和粘贴的部分是认可的,但是:
while read -r -u 3 line; do
serviceport=${line%% *}; serviceport=${serviceport##/*}
if [ "$i" -eq "$choice" ]; then
echo "Running command: netcat $1 $serviceport"
netcat "$1" "$serviceport"
fi
done 3< <(nmap "$1" | grep open)
读取-r-u3行时;做
serviceport=${line%%*};serviceport=${serviceport##/*}
if[“$i”-eq“$choice”];然后
echo“正在运行的命令:netcat$1$serviceport”
netcat“$1”$serviceport
fi
done 3<请运行此程序,以获得一些其他问题的指针,这些问题可能会在直接导致问题的错误之外得到修复。……此外,nmap有一个可选的输出格式,旨在有助于使用shell工具进行操作;请考虑使用它。