从id获取退出状态

时间:2014-04-29 22:28:19

标签: bash shell

我正在尝试对奇怪的LDAP副本问题进行故障排除,并且只想识别/ user中使用“id”命令失败的帐户。

例如:

$ id joe
uid=501(joe) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts)
$ echo $?
0

但是,当帐户未映射到活动的LDAP帐户时:

$ id joesixpack
id: joesixpack: no such user
$ echo $?
1

所以我试图在Bash脚本中捕获它:

for i in `cat $PRUNED_USERS`; do

STATUS=$(id $i | echo $? )

  if [ $STATUS -ne "0" ]; then
       echo $i >> $LOG
    fi
done

但这不起作用,大概是因为我已经搞砸了STATUS=$(id $i | echo $? )

建议?

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

你的剧本,重新发布

while read i
do    
  id "$i" || echo "$i" >> "$LOG"  
done < "$PRUNED_USERS"

答案 1 :(得分:1)

而不是通过echo管道id输出你可能想要将它(和stderr)重定向到/ dev / null,这样STATUS只包含echo $?的输出:

STATUS=$(id $i > /dev/null 2>&1 ; echo $?)

或者不是使用命令替换来获取$?的输出,而是直接使用$?

for i in `cat $PRUNED_USERS`; do

id $i > /dev/null 2>&1

if [ $? -ne "0" ]; then
       echo $i >> $LOG
    fi
done

答案 2 :(得分:0)

您正在将id的输出汇总到echo,但您不想回显id的输出,只需获取其返回码即可。因此,运行id,然后echo $?作为两个单独的命令运行:

STATUS=$(id $i; echo $?)

你可以压制&#34;没有这样的用户&#34;错误消息:

STATUS=$(id $i 2> /dev/null; echo $?)

STATUS现在将保存返回码。