linux - 管道打开 '|' 和 '|-' 之间的区别(安全管道打开)

标签 linux perl pipe

我在perl中见过这两种形式的管道open

一种是简单的管道打开

open FH,'| command';

其他管道安全打开

open FH,'|-','command';

现在,第二个中的 - 有什么用?他们都写入管道。我知道 - fork 了新进程。

简单的|也会创建新进程吗?

我们什么时候应该使用安全管道打开|-

最佳答案

没有区别

 open my $PIPE, '| command';

对比

 open my $PIPE, '|-', 'command';

“安全”打开实际上是

 open my $PIPE, '|-', 'program', @one_or_more_args;

该版本保证直接启动程序;没有调用 shell。它还使您不必将参数转换为 shell 文字。换句话说,

 open my $FH, '|-', 'program', @one_or_more_args;

类似于

 use String::ShellQuote qw( shell_quote );
 open my $FH, '|'.shell_quote('program', @one_or_more_args);

但没有 shell(因此浪费的资源更少,您可以获得程序的 PID 而不是 shell,并且您可以知道程序是否因信号而终止)。

不幸的是,没有像系统那样的带有零参数的程序的语法。

(还有打开我的$PIPE,“|-”,没有进一步的参数,但那是别的东西。)

关于linux - 管道打开 '|' 和 '|-' 之间的区别(安全管道打开),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15308480/

相关文章:

mysql - Perl 在打开 gzip 文件时给出 "gzip: stdout: Broken pipe"错误,但前提是连接到数据库

javascript - Angular - 自定义管道不起作用?

c - 从程序内调用 daemon(0,0) 和在后台启动程序并重定向其输出有区别吗

php - 在 Linux 服务器上安装 Pdftk

Linux sar命令仅在第一行打印标题

linux - 在 Samba 中创建用户 - Debian 6 32 位 - 没有命令工作?

bash - 从文件中的特定行以相反的顺序 Grep 文件

arrays - 有条件地实例化一个新的Perl数组

linux - Bash 提示出现在输出中间

perl - 寻找更好的解决方案 awk 或 perl : avoiding piping xargs etc