我正在编写一个 bash 脚本,该脚本进入 PetaLinux 机器,执行一些命令,然后 应该 退出回到 bash 脚本以继续执行命令。到目前为止我无法退出回到 bash 脚本。
这是我尝试过的:
plink -serial "$BOARD_A_SERIAL_PORT" -sercfg 115200,8,n,1,X -batch <<EOF
root
root
sleep 2
ps aux | grep plink
ps aux | grep plink
killall -9 plink
ps aux | grep [p]link
exit
EOF
echo 'script sucessfully exited' #never reached. the serial terminal hangs
“exit”命令仅退出正在序列化的设备上的登录会话。它不会返回到 bash 脚本。我还了解到 plink 不是一个应用程序,因此尝试杀死它没有帮助。
您正在远程服务器上运行
killall
。但你需要在本地运行它。
以下是如何在 Windows 批处理文件中实现此目的的示例:
使用 plink 通过 COM 端口发送命令并退出
它展示了如何在本地运行
taskkill
,同时运行 plink
。关键点不是通过heredoc [<<EOF
]提供静态输入,而是使用子shell [( )
]。子 shell 允许您使用 echo
命令生成输入,还可以在本地运行 sleep
和 killall
。
将该 Widows 批处理文件转换为 Linux/bash 工具并根据您的需要进行调整,您可以执行以下操作:
(
echo root
echo root
echo your_command
sleep 2
killall -9 plink
) | plink -serial "$BOARD_A_SERIAL_PORT" -sercfg 115200,8,n,1,X -batch
echo 'script successfully exited'
未经测试。另外,我不是 bash 专家,我确信有更优雅的方法可以在 bash 中实现此目的。