使用C语言编写一个shell。如何区分交互模式和批处理模式。

3
我正在使用C语言编写一个既可以交互式操作又可以批量处理的shell。我希望在交互模式下显示提示信息,在批量模式下不显示提示信息。
例如:
bash> ./myshell

应该显示提示,并且

bash> ./myshell < sample.txt

该命令应只显示“sample.txt”文件中的命令输出,而不包括提示符。

由于父进程(即bash)进行了标准输入重定向,因此我不确定myshell如何知道输入流是来自标准输入还是文件?

非常感谢您的帮助。

1个回答

4

isatty(3)可以用来判断给定的文件描述符是否是tty。Shell将使用此功能确定期望何种类型的输入。

例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接