如何解决创建与正斜杠一起使用的 ansible play
我有一个使用 R 的 devtools::install_github 的用例
---
- hosts: slurm_w
vars:
arg: "USCbiostats/slurmR"
tasks:
- debug: var=arg
- shell: R -e devtools::install_github({{ arg }})
register: find
- debug: var=find.stdout.lines
我想做的是写出可以使用 install_github 的剧本
我知道还有另一种方法:githubinstall("PackageName"),它更容易使用,但最终我想要一个解决正斜杠的解决方案
我真正能够按原样安装它的唯一方法是使用我最终从 ansible play 调用的 bash 脚本
错误
fatal: [slurmw01]: FAILED! => {"changed": true,"cmd": "R -e devtools::install_github(\\\"USCbiostats/slurmR\\\")","delta": "0:00:00.004260","end": "2020-12-21 21:19:26.638852","msg": "non-zero return code","rc": 1,"start": "2020-12-21 21:19:26.634592","stderr": "/bin/sh: -c: line 0: syntax error near unexpected token `('\n/bin/sh: -c: line 0: `R -e devtools::install_github(\\\"USCbiostats/slurmR\\\")'","stderr_lines": ["/bin/sh: -c: line 0: syntax error near unexpected token `('","/bin/sh: -c: line 0: `R -e devtools::install_github(\\\"USCbiostats/slurmR\\\")'"],"stdout": "","stdout_lines": []}
解决方法
正如消息中明确指出的,它不是正斜杠,而是 shell metacharacter 的开放括号
您需要对提供给 -e
的表达式进行转义,以防止 bash 尝试解释 (
。最简单的方法是通过 | quote
filter
- shell: R -e {{ ('devtools::install_github("' ~ arg ~ '")') | quote }}
register: find
,
出现此问题的原因是传递给 R 命令的表达式 (-e
) 需要额外的引号。
通常运行如下:
R -e "devtools::install_github('USCbiostats/slurmR')"
我们可以转义引号,如下所示:
- shell: "R -e \"devtools::install_github('{{ arg }}')\""
register: find
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。