shell - Does opening a pipeline in Perl involve a shell?
问题描述
If I do this in a Perl script on a Unix/Linux system:
open(my $fh, 'cat|');
is a shell involved? And if not, what about this:
open(my $fh, 'cat -v|');
I would like to avoid a shell, if possible, and I even know how to do it:
open(my $fh, '-|') || exec('cat', '-v');
but brevity is also valuable.
解决方案
从open,以下代码示例
每个块中的最后两个示例将管道显示为“列表形式”,但并非所有平台都支持。一个好的经验法则是,如果您的平台有一个真正的 fork(换句话说,如果您的平台是 Unix,包括 Linux 和 MacOS X),您可以使用列表形式。您可能希望使用管道的列表形式,这样您就可以将文字参数传递给命令,而不会有 shell 解释其中的任何 shell 元字符的风险。 但是,这也禁止您打开管道到故意包含 shell 元字符的命令,[...]
(我的重点)
之前的最后一个例子是
open(my $fh, "-|", "cat", "-n", $file);
顺便说一句,这几乎正是您在问题中的示例。
推荐阅读
- python - 如何通过创建字典从python中的以下映射访问城市名称
- javascript - 如何通过输入值的变化来改变jquery ui滑块?
- sql - 如何选择每个月的最新记录?
- mathematical-optimization - 优化的输出(使用 GEKKO)为操纵变量(IMODE=6)给出零
- apache-kafka - 使用 apache kafka 请求回复模式实现
- asp.net - 从直播 URL 播放音频
- amazon-web-services - Unix 中的文件观察程序脚本
- php - 如何更改 Woocommerce 价格?
- angular - 使用包含来自端点的数组的可观察对象来查询其他端点并组合成单个可观察对象
- flutter - WidgetsBinding.instance.addPostFrameCallback 不再起作用