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

标签 c linux bash unix

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

如果我回到循环中(我唯一要更改的东西),我会得到这些奇怪的 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/

相关文章:

c - 指针/结构

linux - Red Hat Enterprise Linux Server 5.5 版上的远程 IDE

linux - 在 Ubuntu 中返回自定义进程命令

python - 获取Python中bash命令的所有输出

linux - 如何检查bash命令是否在后台运行?

c - 如何获取一个整数的位数?

c - 数组中的文件指针

python - 调用时出现 digitalocean 脚本错误

linux - 使用 awk 在 BASH 中的特定列中搜索变量

c - 多个源中的 sizeof 时间常数