smbclient的退出代码

时间:2013-11-06 06:55:01

标签: linux shell arm samba smb

我的手臂上的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。

提前谢谢!

1 个答案:

答案 0 :(得分:3)

最好的方法是将-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服务   Pack 1] Server = [Windows Server 2008 R2 Standard 6.1]   NT_STATUS_OBJECT_NAME_NOT_FOUND打开远程文件\ foo