0

我需要允许用户在运行我的 perl 脚本时输入任何内容,因为我的脚本正在以不同的增量将所有数据发送到另一个非自定义脚本。

理论上,我希望这会发生:

perlscript "this is" -t stuff\n4^./q%

然后,在 perlscript 中,有:

print "Full: $full_command";

这导致:

Full: "this is" -t stuff\n4^./q%

这有任何意义吗?我尝试过的任何事情都没有完全符合我正在寻找的 argv 或类似的东西。

感谢您的帮助,蒂姆

4

3 回答 3

4

外壳做的事情相当于

exec('perlscript', 'this is', '-t', 'stuff'.chr(0x0A).'4&^./q%');

没有办法perl从中产生原始的 shell 命令。如果你想让 Perl 接收

"this is" -t stuff\n4^./q%

你需要告诉 shell 使用类似的东西

perlscript '"this is" -t stuff\n4^./q%'

(好吧,至少对于 Borne 壳或衍生物而言。)

于 2012-12-11T18:18:59.833 回答
2

不幸的是,您的 shell 很可能在参数到达 Perl 脚本之前就对其进行了操作。在您的具体示例中,像 bash 这样的 shell 将删除引号,将\n视为n,并在到达 时停止处理该行&。在 Unixy 系统中,最好的办法可能是将所有参数用单引号括起来

perlscript '"this is" -t stuff\n4&^./q%'
于 2012-12-11T17:57:17.317 回答
-1

假设您为您的操作系统正确引用,如上所述,也许以下内容对您有用:

print join(" ", map { / / ? "\"$_\"" : $_ } @ARGV);

请注意,当您运行 perl 时,您需要使用“--”标记将用于 perl 本身的参数与用于您的程序的参数分开。例如:

perl -- -t 'stuff...'

这将防止参数被 perl 本身错误地使用。

于 2012-12-11T18:10:36.817 回答