我在运行 Python 脚本然后继续运行 Bash 脚本时遇到了问题

我在运行 Python 脚本然后继续运行 Bash 脚本时遇到了问题

我正在使用 tcprelay.pyusbmuxd将本地端口 2222 转发到远程端口 22,这样我就可以通过 USB 通过 SSH 连接到我的 iPhone。如果我运行

python ~/Downloads/usbmuxd-1.0.8/python-client/tcprelay.py -t 22:2222

它成功转发了端口,在另一个终端窗口中,我可以运行

ssh -l root -p 2222 127.0.0.1

并成功通过 USB 使用 SSH。但是,我尝试将其合并为一个命令,并且

python ~/Downloads/usbmuxd-1.0.8/python-client/tcprelay.py -t 22:2222
ssh -l root -p 2222 127.0.0.1

不起作用。运行 python 命令后,我无法在该窗口中运行任何其他命令。我该如何将这两个命令放在一起?

谢谢

答案1

根据 MadMike 的回答,您可以使用以下命令:

python ~/Downloads/usbmuxd-1.0.8/python-client/tcprelay.py -t 22:2222 &

while ! (: < /dev/tcp/127.0.0.1/2222) 2>/dev/null; do
    sleep 1
done

ssh -l root -p 2222 127.0.0.1

这将在后台执行 Python 程序,然后等待(每秒检查一次)直到内部端口 2222 打开。然后它将运行该ssh程序。

检查端口是否开放的来源

答案2

您需要让第一个命令在后台运行,并在第一个命令启动后启动第二个命令。我相信还有更优雅的方法(某种程度上),但这应该可以解决问题。

python ~/Downloads/usbmuxd-1.0.8/python-client/tcprelay.py -t 22:2222 &
ssh -l 根 -p 2222 127.0.0.1

末尾的 “&” 符号告诉 bash 在后台运行 python 命令。

如果您需要再次运行该脚本,您可能需要找到正在运行的 python 命令并将其终止,然后才能再次运行它。否则它会抱怨端口已被阻止。

相关内容