Jenkins/Groovy中echo > file的重定向操作不在控制台输出的原因是什么?
Jenkins流水线sh步骤重定向符号未出现在运行日志问题解答
首先明确结论:该现象和转义配置操作无关,属于Bash调试参数的原生特性。
原因说明
你在脚本中配置的set -ex里,-x参数的作用是在执行每条命令前,将命令及其参数打印到标准错误流,也就是你在Jenkins日志里看到的+开头的输出行。
Bash原生设计中,set -x的调试输出仅包含命令本身和传递给命令的参数,重定向操作符>、管道符|这类属于Shell层面的处理逻辑,不属于命令参数,因此不会被打印到调试日志中,这并不代表重定向逻辑没有执行。
验证方法
你可以在原有sh步骤后追加如下代码,验证重定向是否实际生效:
sh(script: """#!/bin/bash ls -l test1.txt cat test1.txt """)
执行后你会看到test1.txt实际存在,且内容和你写入的sometext一致,说明你的流水线配置本身没有问题。
可选调试方案
如果你确实需要在日志中确认重定向操作,可以把包含重定向的命令用bash -c包裹后执行,就可以在调试日志里看到完整的重定向逻辑:
sh(script: """#!/bin/bash set -ex bash -c "echo 'sometext' > test1.txt" """)
此时日志会输出+ bash -c 'echo '\''sometext'\'' > test1.txt',就能看到完整的重定向内容。
内容的提问来源于stack exchange,提问作者cozos
相关产品推荐
相关产品推荐

