【发布时间】:2019-07-14 04:22:22
【问题描述】:
在 ansible playbook 中,我使用一个包含 perl 脚本文件的文件来执行一些任务。如何获取 ansible 以捕获 perl 脚本的 STDIN?
> #!/usr/bin/perl -w
> ...
> print OUTPUT_FILE "\n";
> my $datasetid_target = <STDIN>; <<--not able to link to ansible playbook
> $datasetid_target; print OUTPUT_FILE
> qq("datasetId":"$datasetid_target",);
该脚本作为一个独立的脚本运行良好,但使用 ansible 不会打印任何内容。
我尝试使用 args、vars、expect、stdin 没有成功。
预期结果大致如下:(请参阅快照)
> - name: edit source file
> shell: perl "{{ project_dir }}/edit_dataschema.pl"
> args:
> stdin: <<-- here is my problem
> "{{datasetid_target}}"
【问题讨论】:
-
嗨 Bhargavi,欢迎来到 SO。请更具体地说明正在发生的事情;你的程序挂了吗?我能够用
shell: perl -we '$foo = <STDIN>; print qq("foo": "$foo",);'组合一个简单的例子,它在与args: stdin:一起使用时表现合理,所以我担心你只是有不恰当的期望 -
嗨,马修,感谢您的帮助。有没有办法传递多个标准输入?例如: args: stdin: $dataset_target: {{dataset_target}} $tablename: {{tablename}}?
-
@BhargaviJagannathan 我没听懂你..? STDIN 中的多个输入是什么意思。?您可以在 while 循环中进行输入。否则读取输入并使用空格字符分割。
-
重新表述我的问题:如何使用 shell 模块将 3 个命令行参数传递给 perl 脚本。我使用 programname.pl arg1
arg2 arg3。但是脚本只处理第一个参数。