【问题标题】:Writing a shell using C. How to differentiate interactive mode and batch mode使用 C 编写 shell。如何区分交互模式和批处理模式
【发布时间】:2014-03-30 09:25:40
【问题描述】:

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

bash> ./myshell

应该显示提示,并且

bash> ./myshell < sample.txt

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: c shell io stdin


    【解决方案1】:

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

    例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-10
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多