gpt4 book ai didi

c - 有循环的 Stty 错误,没有循环没有 stty 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:18 31 4
gpt4 key购买 nike

如果我在手动执行每一行时取出循环和变量,不明白为什么我的代码可以工作。一开始我以为我的变量是错误的,但后来我用这些变量测试了我的代码,但没有循环,它起作用了。

如果我回到循环中(我唯一要更改的东西),我会得到这些奇怪的 stty 错误。

while read p; do
#Send file
scp random_file.txt $p:/me/folder"

#Log in
ssh $p"@myserver.txt"

#List file, extract file, append file
#Code here

#log out
exit

done <usernames.txt

我已经用谷歌搜索了这个错误(这是一个非常常见的错误)令人作呕,但没有一个解决方案有效。禁用伪 tty 分配或强制伪 tty 分配对我有用。无论选项如何,我总是会出错

-t -t 选项

tcgetattr: Inappropriate ioctl for device

-t 选项

Pseudo-terminal will not be allocated because stdin is not a terminal.    
stty: : Invalid argument

-T选项

stty: : Invalid argument

那么我该如何解决这些 stty 错误以及为什么当我将其放入循环中时它会停止工作?

最佳答案

输入重定向 <usernames.txt正在用文件 usernames.txt 替换标准输入.因此终端不再是输入,导致这些错误。解决此问题的一种方法是使用标准输入以外的文件描述符,例如:

while read p <&3; do

done 3<usernames.txt

您遇到的另一个问题是循环内的命令是在本地执行的,而不是超过ssh。在远程机器上,所以 exit将退出您的本地 shell(在您通过手动注销从 ssh 返回后)。您可以在 ssh 上放置要远程执行的命令命令行(参见 ssh 手册,或例如 this question ),这可能会消除您首先将终端作为标准输入的需要。

关于c - 有循环的 Stty 错误,没有循环没有 stty 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24868099/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com