在bash中绕过退出代码

所以我有一个小脚本,应该通过不同的服务器SSH到1000左右的帐户,如下所示。

for account in $(cat $SSH_LIST) do echo -e "\n$account\n" SERVER=$(echo $account | cut -d',' -f1 | awk '{print tolower($0)}') ; USER=$(echo $account | cut -d',' -f2) ; PASS=$(echo $account | cut -d',' -f3) sshpass -p $PASS ssh -o StrictHostKeyChecking=no $USER@$SERVER "ls passwd.cdb && exit" 

问题是,当ssh遇到拒绝的权限时,脚本退出。 可以理解的是,SSH权限被拒绝的行为就像退出代码并退出脚本。 我需要它来简单地login被拒绝的许可,并继续以快乐的方式SSH'ing。

有什么build议?

通常情况下,bash不会退出第一个错误,除非在脚本set -e设置得更高。 尝试在你的for循环之前。

 set +e 

ps你在循环结束时错过了一个done 我认为这只是一个剪切和粘贴错误。

尝试以下操作:

 if ! sshpass -p $PASS ssh -o StrictHostKeyChecking=no $USER@$SERVER "ls passwd.cdb && exit"; then echo >&2 "WARNING: access denied for $USER@$SERVER" fi 

你也可以使用逻辑运算符OR

 sshpass -p $PASS ssh -o StrictHostKeyChecking=no $USER@$SERVER "ls passwd.cdb && exit" || echo >&2 "WARNING: access denied for $USER@$SERVER" 

只是为了在这里更新,我知道这是一段时间,一直忙碌:)。 结果是-e被设置在脚本顶部的一些混淆代码中。 有混淆代码的人删除它。 也感谢slava semushin的好主意登录访问被拒绝的消息。