我正在尝试对奇怪的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 $? )
建议?
非常感谢您的帮助。
丹
答案 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
现在将保存返回码。