gpt4 book ai didi

linux - 如何检查 perl 脚本中的管道数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:50 26 4
gpt4 key购买 nike

我目前正在使用这两个 if 语句来确定数据是通过管道传入还是来自文件:

pod2usage("$NAME: Requires at least one argument FILE.\n") if ((-t STDIN) && (@ARGV == 0));
pod2usage("$NAME: zero if input is from STDIN.\n") if (!(-t STDIN) && (@ARGV != 0));

当从 shell 交互式运行 perl 脚本时,这工作正常。例如,这些按预期工作:

$ perl_script <flags> filename
$ cat | perl_script <flags>

但是,当从 bash 脚本或类似 emacs 中的 org-mode 之类的东西调用 perl 脚本时,脚本认为它正在通过管道输入数据,并在文件作为参数给出时抛出 pod2usage 错误。这是导致此行为的示例:

#!/bin/bash
while read line
do
perl_script <flags> $line >> output_file
done < file_names.txt

我猜这是因为 -t STDIN 返回 false 因为它是非交互式运行的,所以它没有连接到终端。如果脚本以交互方式运行或从 shell 脚本调用,有没有办法确保我得到正确的行为?

最佳答案

试试这个:

#!/bin/bash
TTY=`tty`
while read line
do
perl_script <flags> $line < $TTY >> output_file
done < file_names.txt

关于linux - 如何检查 perl 脚本中的管道数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30429469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com