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

标签 c shell io stdin

我正在用 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
}

关于c - 用C写shell,如何区分交互模式和批处理模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060222/

相关文章:

c - 可以在CUDA设备中使用SAL(科学算法库)吗?

shell - Hive ALTER 命令删除值早于 24 个月的分区

Java:如何从inputStream获取编码?

c - 循环文本文件时出现不需要的字符

c - 使用 O_CREAT 调用 open() 的默认模式是什么以及如何在打开/创建文件时正确设置它

c - 如何检查字符串是否只包含 1 和 0?

c++ - 如何使用 gtags -v 创建索引但跳过一些子目录

c - 在平均运行时间内使用快速排序时是否可能出现堆栈溢出?

c++ - 为什么我的 shell 只检测 0 - 255 之间的返回码?

linux - 用于查找第 n 次出现的字符串并打印行号的 shell 脚本