【发布时间】:2017-12-25 19:00:26
【问题描述】:
我想检查用户是否有权访问某个 samba 共享。我目前正在使用Version 4.3.11-Ubuntu 中的命令smbclient 执行此操作。
显然使用exit 状态来评估成功不是一个好主意,如以下问题所述:Exit codes of smbclient
不过我还是有一些奇怪的行为。使用 Perls system 函数调用程序时,我得到不同的退出状态。
perldoc -f system 告诉我这个:
返回值是程序返回的退出状态 “等待”呼叫。
从命令行调用时,我得到EXIT 1
user@host:~$ smbclient //server/share MyFalsePassword --user=any.user -c "cd somefolder;"; echo "EXIT $?"
WARNING: The "syslog" option is deprecated
session setup failed: NT_STATUS_LOGON_FAILURE
EXIT 1
调用相同的 whitin Perl 我得到 EXIT 256。
user@host:~$ perl -E 'say "EXIT " . system("smbclient //server/share MyFalsePassword --user=any.user -c \"cd somefolder;\"");'
WARNING: The "syslog" option is deprecated
session setup failed: NT_STATUS_LOGON_FAILURE
EXIT 256
我在变量$? whitin Perl 中也有值256。
注意:如果我使用正确的凭据,我会在两个(Bash 和 Perl)中得到 EXIT 0。
我的问题:如果我使用错误的凭据,为什么会从 Bash 和 Perl 获得不同的退出状态?如何正确检查?
我在 Ubuntu 16.04 上使用 Perl v5.22。
【问题讨论】: