使用 bash 脚本中的 plink 通过串行连接发送命令并退出

问题描述 投票:0回答:1

我正在 Windows 计算机上编写一个 bash 脚本,该脚本通过串行连接进入 PetaLinux 计算机,执行一些命令,然后 应该 退出回到 bash 脚本以继续执行命令。到目前为止我无法退出回到 bash 脚本。

这是我尝试过的:

#!/bin/bash

echo "Running board bring up script"

BOARD_A_SERIAL_PORT="COM22"

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 successfully exited' #never reached. the serial terminal hangs
bash scripting serial-port plink petalinux
1个回答
0
投票

您正在远程服务器上运行

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 中实现此目的。

© www.soinside.com 2019 - 2024. All rights reserved.