不会分配伪终端,因为标准输入不是终端 & 混乱:ttyname 失败:设备的 ioctl 不合适

Pseudo-terminal will not allocated because stdin is not a terminal & mess: ttyname failed: Inappropriate ioctl for device

我已经编写了一个 shell 脚本来执行 scp、ssh、删除目录、解压缩和删除 zip 文件

#!/bin/bash

tar -czf zipfile.tar.gz ./* .??*
scp zipfile.tar.gz root@some.ip.address:/var/www/html/wp-content/themes
rm zipfile.tar.gz

ssh root@some.ip.address << 'ENDSSH'
cd /some/directory
rm -rf zipfile
mkdir zipfile
tar xf zipfile.tar.gz -C zipfile
rm zipfile.tar.gz
ENDSSH

我注意到文件已成功传输并解压缩。 zip 文件也已成功从服务器中删除。 但是,我注意到我在终端中收到这些消息

zipfile.tar.gz  100% 224KB ...
Pseudo-terminal will not be allocated because stdin is not a terminal.
...
Welcome to Ubuntu 18.04.3 LTS...
...

0 packages can be updated.
0 updates are security updates.

mesg: ttyname failed: Inappropriate ioctl for device

运行 第二个块 (ENDSSH) 之前的脚本似乎没有输出这些消息并成功执行。

问题是 ENDSSH 造成的吗?

你可以这样写:

ssh -tt root@some.ip.address << ENDSSH
your code
exit
ENDSSH

你试试吧。