我正在尝试检查发送到服务器的命令列表中先前命令的状态以更改密码。当我只是 echo $?
时它就起作用了。当我将其存储到像 STATUS=$?
这样的变量,然后 echo $STATUS
时,我得到一个空行。当我将 echo $?
放入 if 循环中时,也会返回一些奇怪的东西。下面是 ssh 命令的代码,提供有关如何修复此问题的任何建议。
ssh <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="98eaf7f7ecd8a9a1aab6a9aea0b6adaeb6a9ab" rel="noreferrer noopener nofollow">[email protected]</a> "printf '%s\n%s' "$PASSWORD" "$PASSCONFIRM" | passwd; STATUS=$?; echo $STATUS; if (( $STATUS == 0 )); then printf 'Password Changed Successfully\n'; else printf 'Password Change Unsuccessful\n'; fi; sleep 1;"
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Password Change Unsuccessful
bash: ((: == 0 : syntax error: operand expected (error token is "== 0 ")
最佳答案
您需要对要在远程服务器中使用的变量进行转义。
$PASSWORD
和 $PASSWORDCONFIRM
都可以,它们在本地服务器中使用。
$STATUS
和 $?
进行评估,因此您需要对它们进行转义:STATUS=\$?
、echo\$STATUS
和 if ((\$STATUS == 0))
关于bash - 获取存储到 ssh 命令内变量的退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53719183/