perl - 如何在一行中将命令行参数传递给 perl 脚本文件
问题描述
我有一个 perl 脚本文件,它在 ubuntu 终端上运行
所以在运行时,我会这样调用它:
./myscript.pl
在运行时,在终端下,它开始要求我应该录制一些“确认”(用于配置),如下所示:
然后,另一次与另一次要求“确认”
,然后在其他近 10 次不同的配置确认中,我总是使用默认选项。
所以我的目的是如何能够一次完成,仅在一行命令中,然后能够将它放在 bash_profile 下。
我会试试这个:
./myscript.pl "yes" "yes "no" ..... "yes"
但我不知道这是否可行。
解决方案
有多种方法可以处理这个问题。如果您控制程序,您应该重新安排它以在它不是交互式时接受默认值(并且IO::Interactive是一个很好的工具)。
对于真正快速的事情,有时我只是prompt
从ExtUtils::MakeMaker
. 它是独立的,因此您可以根据需要窃取和修改它:
#!perl
use v5.10;
use ExtUtils::MakeMaker qw(prompt);
my @answers;
push @answers, prompt( "First", "yes" );
push @answers, prompt( "Second", "yes" );
push @answers, prompt( "Third", "yes" );
say "Done! Got @answers";
如果我正常运行,我必须回答提示:
$ perl yes.pl
First [yes] cat
Second [yes] dog
Third [yes] bird
Done! Got cat dog bird
但是ExtUtils::MakeMaker
有一个环境变量来接受默认值:
$ PERL_MM_USE_DEFAULT=1 perl yes.pl
First [yes] yes
Second [yes] yes
Third [yes] yes
Done! Got yes yes yes
从这里到答案的结尾只是提供输入的 shell 技术。没有特殊的 Perl 东西在发生。而且,根据程序本身试图做什么,有些事情可能不起作用。
我也可以喂它/dev/null,在这种情况下,它会意识到程序没有以交互方式运行,并且它接受我的默认值:
$ perl yes.pl < /dev/null
First [yes] yes
Second [yes] yes
Third [yes] yes
Done! Got yes yes yes
但是,我也可以为它输入一个多行字符串:
$ perl yes.pl <<HERE
yes
yes
no
HERE
First [yes] Second [yes] Third [yes] Done! Got yes yes no
这对您的文件来说可能太多了,因此您可以使用嵌入的行回显一个字符串:
$ perl yes.pl < <( echo -e "yes\nno\nhello")
First [yes] Second [yes] Third [yes] Done! Got yes no hello
$ perl yes.pl < <( echo $'yes\nno\nhello')
First [yes] Second [yes] Third [yes] Done! Got yes no hello
或者从文件中获取输入:
$ perl yes.pl < input.txt
First [yes] Second [yes] Third [yes] Done! Got heck yeah no way yep
而且,从simbabque 的答案中窃取,因为我要列出技术列表:
$ printf "yes\nyes\nno\n...\nyes\n" | yes.pl
推荐阅读
- python - 访问嵌套字典中的更深层次的列表项?
- continuous-integration - 为什么外部 git 存储库不是 Azure 门户中部署中心的选项?
- swift - Swift 泛型:使用泛型类型的属性扩展非泛型类型,其中泛型参数是扩展类型
- jekyll - 更改博客文章的 Jekyll URL
- matlab - 如何删除极坐标图上的 theta 网格和半径网格?
- html - 3个下拉单独的下拉列表,只选择最上面的一个
- asp.net - 如果没有结果,Gridview 就会消失
- javascript - 使用按字母顺序排序的选项填充选择
- javascript - 如何将 JSON 数据分解为子字符串,以便以后计算?
- android - 是否可以允许刷卡(刷卡)但禁止在 Android 中输入?