首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何告诉Ansible win_shell不要尝试解释多行命令

如何告诉Ansible win_shell不要尝试解释多行命令
EN

Stack Overflow用户
提问于 2019-11-06 15:56:25
回答 1查看 1.3K关注 0票数 1

当您在powershell中直接运行ps代码块时,下面的“问题播放”运行得很好。但是,当通过Ansible运行时,它会出现以下情况:

ERROR! failed at splitting arguments, either an unbalanced jinja2 block or quotes: $iExit = 0

运行简单的代码块,没有问题(也包括在下面)

我尝试使用{% raw %}和{% endraw %}在jinja2多行转义中包装该块。但是,错误总是出现在第一行:

ERROR! failed at splitting arguments, either an unbalanced jinja2 block or quotes: {% raw %}

问题玩

代码语言:javascript
运行
复制
tasks:

  - name: Purge all rotated logs
    win_shell: |
      $iExit = 0
      Get-ChildItem D:\application*|? {$_.PSIsContainer -eq $true}|% {
      Get-ChildItem log* -Path "$_\logs\" -ErrorAction Stop |? {$_.Name -match "log\d{4}-\d{2}-\d{2}\.\d{2}\.txt"}|% {
      Write-Host Removing $_.FullName which is $_.Length Bytes and last written to on $_.LastWriteTime
      Try {
      Remove-Item $_.FullName -ErrorAction Stop
      }
      Catch [Exception] {
      $iExit = 1
      Write-Host "[ERROR removing file: $($_.Exception.Message)]"
      }}}
      Exit $iExit

无问题游戏

代码语言:javascript
运行
复制
tasks:

    - name: Purge all rotated logs
      win_shell: |
        Get-Childitem log* -Recurse -path D:\logs\ |
        Where{$_.Name -match "log\d{4}-\d{2}-\d{2}\.\d{2}\.txt"} |
        Foreach-Object {
        Write-Host Removing $_.FullName which is $_.Length Bytes and last written to on $_.LastWriteTime
        Remove-Item $_.FullName
        }
EN

Stack Overflow用户

回答已采纳

发布于 2019-11-06 19:07:41

看起来问题就在于这一行:

代码语言:javascript
运行
复制
...
Get-ChildItem log* -Path "$_\logs\" -ErrorAction Stop ...
...

具体来说,最后一句话是:

代码语言:javascript
运行
复制
"$_\logs\"

无意中,通过使用尾随斜杠的文件路径,您不小心告诉Ansible用\"转义最后一个引号,看起来它关闭了字符串,这会导致“不平衡引号”错误。

删除尾随斜杠应该可以解决错误。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58734056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档