gpt4 book ai didi

linux - 如何使用/usr/bin/env perl 功能和perl 参数?

转载 作者:IT王子 更新时间:2023-10-29 00:49:30 26 4
gpt4 key购买 nike

我有一个带有 shebang 的 perl 脚本

#!/usr/bin/env perl

我希望此脚本在执行时打印每一行。所以我安装了 Devel::Trace 并将脚本 shebang 更改为

#!/usr/bin/env perl -d:Trace

但这会产生错误,因为它不是有效的语法。

我应该怎么做才能同时使用 env 功能和 tracing 功能?

最佳答案

这是在某些系统上 Just Doesn't Work™ 的事情之一,特别是那些带有 GNU env 的系统。

这是 perlrun 中提到的一个偷偷摸摸的解决方法我过去 (ab) 使用过的:

#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;

print "Hello, world!\n";

这将在您的 PATH 上找到 perl,您可以将任何其他您想要的开关添加到命令行。您甚至可以在调用 perl 之前设置环境变量等。一般的想法是 sh 运行 eval,但是 perl 没有,额外的粗糙位确保 Perl 正确地找到你的程序并且传递所有参数。

#!/bin/sh
FOO=bar; export FOO

#! -*-perl-*-
eval 'exec perl -d:Trace -x -wS $0 ${1+"$@"}'
if 0;

$Devel::Trace::TRACE = 1;

print "Hello, $ENV{FOO}!\n";

如果您使用 .pl 扩展名保存文件,您的编辑器应该检测到正确的文件语法,但最初的 shebang 可能会忽略它。另一个警告是,如果脚本的 Perl 部分抛出错误,行号可能会关闭。

这个技巧的巧妙之处在于它也适用于 Ruby(可能还有一些其他语言,如 Python,需要额外的修改):

#!/bin/sh
#! -*-ruby-*-
eval 'exec ruby -x -wS $0 ${1+"$@"}' \
if false

puts "Hello, world!"

希望对您有所帮助!

关于linux - 如何使用/usr/bin/env perl 功能和perl 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50035073/

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