bash脚本调用子脚本仅显示stdout首词,如何输出全部内容?
问题解决方法
你的问题出在参数传递时未加双引号,导致bash将子脚本的输出按空格、换行等分隔符拆分成多个参数,error_return函数仅能拿到第一个单词。修改如下:
修改后的完整代码
error_return() { echo "Error received during '$1' execution. Log:" while IFS= read line; do echo " $line " done <<< "$2" } build_doc() { echo "Building documentation" docbuild=$(bin/doc-build.sh) if [ $? -eq 0 ]; then echo "Documentation built." else error_return "build_doc" "$docbuild" fi }
关键修改点
- 调用
error_return时,将$docbuild改为"$docbuild":确保子脚本的全部输出作为单个完整参数传递,避免被bash分词拆分。 - 在
error_return的here-string中使用"$2":保证读取的是完整的输出内容,不会被拆分处理。 - 移除多余的
wait命令:$(...)会同步等待子脚本执行完毕,wait在此处无实际作用。
内容的提问来源于stack exchange,提问作者Frank C.
相关产品推荐
相关产品推荐

