bash - 获取存储到 ssh 命令内变量的退出状态

标签 bash if-statement ssh

我正在尝试检查发送到服务器的命令列表中先前命令的状态以更改密码。当我只是 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\$STATUSif ((\$STATUS == 0))

关于bash - 获取存储到 ssh 命令内变量的退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53719183/

相关文章:

if-statement - 在 Brainfuck 中做一个 if(x==y) 语句

ssh - 如何在 Guacamole 中将主机名作为 ssh 的参数传递

linux - 如何在 SSH 连接上编辑 root 拥有的文件

linux - ^[ 在 shell 提示符下转义

JavaScript:仅当单词包含整数 0-9 时,如何从字符串中删除最后一个单词?

r - ifelse 在 R : If either 3 conditions evaluated on 3 vectors is true, 中向所有向量添加一个常量

php - 使用 PHP SSH2 打开流时使用 ~/.ssh/config

bash 脚本 : change all & to &amp; in all files

linux - 是否可以按确切日期查找文件然后对结果文件执行 tar 命令?

bash - 区分大小写的排序 Unix Bash