![丑陋的 bash 函数通过 ssh 发送命令并在屏幕上“说出”任何内容。有没有更好的办法?](https://linux22.com/image/60416/%E4%B8%91%E9%99%8B%E7%9A%84%20bash%20%E5%87%BD%E6%95%B0%E9%80%9A%E8%BF%87%20ssh%20%E5%8F%91%E9%80%81%E5%91%BD%E4%BB%A4%E5%B9%B6%E5%9C%A8%E5%B1%8F%E5%B9%95%E4%B8%8A%E2%80%9C%E8%AF%B4%E5%87%BA%E2%80%9D%E4%BB%BB%E4%BD%95%E5%86%85%E5%AE%B9%E3%80%82%E6%9C%89%E6%B2%A1%E6%9C%89%E6%9B%B4%E5%A5%BD%E7%9A%84%E5%8A%9E%E6%B3%95%EF%BC%9F.png)
我正在研究一个可以工作但很丑陋的功能。可以改变的一件事是能够知道屏幕的名称。使用 screen -dms minecraft java ….jar 现在启动一个屏幕会话,其名称似乎是随机数..主机名。接下来是巫毒,它恰好从 screen -ls 中删除名称并使用它。然后是awk。一定有更好的方法。
say_this()
{
REEN="$(ssh -p 8989 192.168.1.101 screen -ls)"
echo $REEN > log/log.txt
AWK="$(awk 'FNR == 1 { print $6 }' log/log.txt)"
NAME="$(echo $AWK)"
echo $1
ssh -p 8989 192.168.1.101 screen -S $NAME -p 0 -X stuff \"$1^M\"
}
say_this "say test"
say_this "say !@#$%^&*()<>?This string should work!"
答案1
您不必要地使用了大量变量和日志文件。
我不确定之后的内容stuff
,但我打赌它可以更简单:
say_this()
{
local name="$(ssh -p 8989 192.168.1.101 screen -ls | awk 'NR==2 {print $1}')"
echo "$1"
ssh -p 8989 192.168.1.101 screen -S "$name" -p 0 -X stuff "$1"
}