linux – smbclient的退出代码

我手臂上的samba的命令行命令“smbclient”有问题.

我写了一个脚本来从Windows Share下载文件.
这是这个脚本的smb部分.

smbclient  //CNAME/SNAME -I0.0.0.0 -N -c "case_sensitive; cd folder; prompt; mget file"
echo $?

我的问题是退出代码.
如果文件已完全下载,则退出代码为0(确定)
如果无法下载文件,退出代码为1(OK)
如果由于下载文件而导致testmaschine失去与共享的连接,则退出代码为0(NOT GOOD),但错误(“Lost connection … etc.”)将写入控制台. (好)

我尝试了两个不同的版本.
桑巴3.0.32
桑巴3.6.19
两者都一样.

有人知道一个好的解决方法(或smbclient-argument)让我的脚本知道,下载失败了吗?

PS.我检查了smbclient来源.看起来他们忘了设置exitcode.因为每次有另一个错误,设置Errormessage并执行(例如exit(1)).但是对于超时,他们只设置Errormessage.

先感谢您!

解决方法:

最好的方法是使用-E参数进行smbclient并从命令行重定向2> / errorlog.然后,您可以检查此文件以查看是否发生了任何错误.

警告,第一行始终是Domain = ………所以你可能需要删除该行.

像这样的东西:

smbclient Hostname -A authfile -E 1>log 2>errorlog <<-EOF 
get foo 
EOF

在错误日志中,您应该找到类似下面的内容,您的日志文件将为空

Domain=[Hostname] OS=[Windows Server 2008 R2 Standard 7601 Service
Pack 1] Server=[Windows Server 2008 R2 Standard 6.1]
NT_STATUS_OBJECT_NAME_NOT_FOUND opening remote file \foo

上一篇:linux 安装samba


下一篇:1.Git安装