代码之家  ›  专栏  ›  技术社区  ›  Paul Dixon

如何获取未修改的命令行参数以“包装”另一个命令行工具?

  •  5
  • Paul Dixon  · 技术社区  · 15 年前

    我想写一个剧本 foo 这就叫 bar 使用与调用它完全相同的参数,使用Bash或Perl。

    #!/bin/perl
    
    my $args=join(' ', @ARGV);
    `bar $args`;
    

     foo "I wonder, \"does this work\""
    

    酒吧会被这样称呼

     bar I wonder "does this work"
    

    如何获得原始命令行,以便可以逐字地传递它?

    3 回复  |  直到 15 年前
        1
  •  12
  •   Community Erin Dees    7 年前

    在shell处理perl可执行文件之前,您无法获取这些参数。但是,您可以确保shell不会处理它们 再一次 :

    system('bar', @ARGV);
    

    system("bar @ARGV");
    

    perldoc -f system

    如果有 只有一个标量参数,将检查该参数是否有shell元字符,如果有,则将整个参数传递给系统的 用于解析的命令shell(在Unix平台上为“/bin/sh-c”,但在其他平台上有所不同)。如果中没有shell元字符

    如果需要读取程序的输出,请使用进程句柄并以相同的方式传递参数(无插值):

    open my $barhandle, '-|', 'bar', @ARGV or die "Can't call bar: $!";
    while (my $line = <$barhandle>)
    {
        # do something with $line...
    }
    close $barhandle;
    

    What's the difference between Perl's backticks, system, and exec?

        2
  •  3
  •   tsee    15 年前

    非常简单。查看系统调用的系统(列表)变体。

    system('bar', @ARGV);
    

    perldoc-f系统

        3
  •  3
  •   Jonathan Leffler    15 年前

    在bash中:

    exec bar "$@"