c之用C写shell,如何区分交互模式和批处理模式

sky-heaven 阅读:58 2025-04-02 23:11:03 评论:0

我正在用 C 编写一个同时具有交互和批处理模式的 shell。我想在交互模式下打印提示,而不要在批处理模式下显示它。

bash> ./myshell 

应该显示提示,并且

bash> ./myshell < sample.txt 

应该只显示“sample.txt”中命令的输出,而不是提示。

由于父进程(即 bash)进行了 stdin 重定向,我不确定 myshell 如何判断输入流是来自 stdin 还是来自文件?

非常感谢您的帮助。

请您参考如下方法:

isatty(3)可用于确定给定的文件描述符是否为 tty . Shell 将使用它来确定期望的输入类型。

例如:

if (isatty(STDIN_FILENO)) { 
    // Interactive shell 
} 
else { 
    // Redirected stdin 
} 


标签:Shell
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号