如何在Unix脚本直接管道中使SQLCL的SET ECHO ON生效?
解决SQLCL管道中SET ECHO ON不生效的问题
直接在管道中让SET ECHO ON生效,核心是让SQLCL能正确识别每条独立命令——你之前的问题出在普通echo没有将\n解析为实际换行符,导致两条命令被当成一行处理,SET指令因此被忽略。以下是几种无需中转文件的解决方案:
使用
printf替代echo,它默认支持转义字符解析:printf "SET ECHO ON;\nSELECT COLA FROM MYTABLE;\n" | sql -L <connectionstr>printf会把\n转换成实际换行,让SET ECHO ON;和查询语句作为两条独立命令被SQLCL处理。如果用Bash的
echo,加上-e选项开启转义字符解析:echo -e "SET ECHO ON;\nSELECT COLA FROM MYTABLE;" | sql -L <connectionstr>-e参数会让echo把\n识别为换行,而非字面字符串。用Bash的Here-String语法,写法更直观:
sql -L <connectionstr> <<< $'SET ECHO ON;\nSELECT COLA FROM MYTABLE;'$'...'是Bash的特殊语法,会自动解析内部的转义字符,生成带换行的命令内容直接传给SQLCL。
这些方法都能让SET ECHO ON正常生效,同时执行查询后自动退出SQLCL。
内容的提问来源于stack exchange,提问作者halloleo
相关产品推荐
相关产品推荐

