【问题标题】:What is the -t used for in this Perl code这个 Perl 代码中的 -t 是做什么用的
【发布时间】:2013-12-02 15:48:21
【问题描述】:

我在 perldoc 中读到 -t 文件运算符用于决定文件句柄是否打开到 tty。然后我读到了 tty 是什么,据我所知,这是一个终端的旧术语?

然而,我的主要问题是这段代码的用途:

if(-t STDERR) {
    die "some warning/error message here"
}

我想我真的不明白“文件句柄打开到 tty”是什么意思。这是否意味着该文件句柄的特定输出出现在 tty 或终端上? tty 可以引用终端以外的东西吗?

【问题讨论】:

    标签: perl filehandle


    【解决方案1】:

    TTY 是一种 unix 设备。控制台在程序中显示为 TTY,因此该语句基本上读作

    “如果将 STDERR 发送到控制台,...”

    但不完全是。我们谈论的不是物理设备,而是逻辑设备,例如/dev/tty*。因此,程序可以伪装成终端。例如,Expect 使用 IO::Pty 来执行此操作。

    STDERR 也可以是普通文件、管道或套接字。 -t 对于这些是错误的。

    script 2>foo        # Plain file
    script 2>&1 | cat   # Pipe
    

    【讨论】:

      【解决方案2】:

      此代码想要断言标准错误正在被重定向到文件。这么跑

      perl the_script.pl
      

      会触发die调用,但是

      perl the_script.pl 2> error.log
      

      不会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多