Smbclient的退出代码

9

我在使用Samba的命令行命令"smbclient"时遇到了问题,我的设备是ARM架构。

我编写了一个脚本来从Windows共享中下载文件,以下是其中涉及smb的部分。

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

我的问题在于退出代码。 如果文件被完全下载,退出代码为0(OK) 如果文件无法下载,则退出代码为1(OK) 如果测试机因下载文件而失去与共享的连接,则退出代码为0(NOT GOOD),但错误(“Lost connection ...等)将写入控制台。 (OK)
我尝试了两个不同版本。 samba-3.0.32 samba-3.6.19 两个版本都一样。
有没有人知道一个好的解决方法(或smbclient参数),让我的脚本知道下载失败了?
PS。 我检查了smbclient源代码。 看起来他们忘记设置退出代码。 因为每次出现其他错误时,他们都会设置错误消息并执行(例如 exit(1))。 但是对于超时,他们只设置Errormessage。
提前感谢你!
1个回答

3
最好使用smbclient的-E参数并从命令行重定向2>/errorlog。然后,您可以检查该文件以查看是否发生任何错误。
警告:第一行始终是Domain=.......... ,因此您可能需要将该行删除。
像这样:
smbclient Hostname -A authfile -E 1>log 2>errorlog <<-EOF 
get foo 
EOF

在错误日志中,你应该会找到类似下面的内容,你的日志文件会是空的:

域=[主机名] 操作系统=[Windows Server 2008 R2 Standard 7601 Service Pack 1] 服务器=[Windows Server 2008 R2 Standard 6.1] NT_STATUS_OBJECT_NAME_NOT_FOUND 打开远程文件 \foo


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接