#!/usr/bin/env perl use warnings; use strict; use 5.012; use IPC::System::Simple qw(system); system( 'xterm','-geometry','80x25-5-5','-bg','green','&' ); say "Hello"; say "World";
我试过这样在后台运行xterm-command,但它不起作用:
No absolute path found for shell: &
什么是正确的方式使其工作?
解决方法
Perl的
system功能有两种模式:
>取一个单一的字符串并将其传递到命令shell,以允许处理特殊字符
>获取字符串列表,执行第一个并将剩余的字符串作为参数传递
在第一种形式中,你必须小心地转义可能对shell有特殊意义的字符.第二种形式通常更安全,因为参数直接传递给被执行的程序,而不涉及shell.
在你的情况下,你似乎正在混合这两种形式. The&字符只有传递给shell时才具有“在后台启动该程序”的意思.在你的程序中,&符号被作为第五个参数传递给xterm命令.
正如Jakob Kruse所说,简单的答案是使用单串形式的系统.如果任何参数来自不信任的来源,您将不得不使用引用或转义来使其安全.