Samba Client(smbclient)使用get/mget时标准输出与错误输出颠倒问题
smbclient输出流异常问题解答
核心结论
你观察到的文件传输命令输出流颠倒现象,是smbclient的已知历史遗留设计,既不属于使用错误,也不属于官方认定的可修复bug。
设计逻辑说明
smbclient早期开发时,针对文件传输类操作的输出规则和通用CLI工具约定相反:
get/mget/put/mput类文件传输操作的成功提示、传输速率等日志,默认输出到标准错误(stderr)- 命令执行报错信息(如路径不存在、权限不足、认证失败等),默认输出到标准输出(stdout)
该特殊规则仅对文件传输类命令生效,其余查询、管理类smbclient命令的输出流符合常规约定。官方目前没有修改该规则的计划,因为改动会破坏大量已适配现有输出逻辑的历史脚本,影响向下兼容性。
适配方案
如果需要按通用逻辑拆分日志,可以调整重定向规则,互换两个流的捕获目标:
# 成功传输日志写入success.log,错误信息写入error.log smbclient //<myip>/<myshare> -c "prompt;cd myPath; mget *.csv;" -U <myuser> 1> error.log 2> success.log
如果不需要区分两类日志,直接合并两个流即可避免日志遗漏:
# 所有输出统一写入full_log.log smbclient //<myip>/<myshare> -c "prompt;cd myPath; mget *.csv;" -U <myuser> &> full_log.log
内容的提问来源于stack exchange,提问作者Tobias von Falkenhayn
相关产品推荐
相关产品推荐

