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