使用 stdin 时命令的返回值?

使用 stdin 时命令的返回值?

成像我正在执行以下命令:

echo "root:mypass" | chpasswd

如何获取 chpasswd 返回的返回码/错误码?在这种情况下这可能吗?我试过

RET = `echo "root:mypass" | chpasswd`

但这只给了我“找不到命令”?

答案1

美元?变量保存最后一个命令的返回值。你可以这样做:

echo "root:passwd" | chpasswd
RET=$?

或者直接测试,例如

echo "root:passwd" | chpasswd
if [ "$?" -ne 0 ]; then
  echo "Failed"
fi

答案2

如果返回值不重要,只要成功与否,您可以在语句中使用该命令if

if ! echo "root:mypass" | chpasswd; then
  # chpasswd failed
fi

或者较短的一个:

echo "root:mypass" | chpasswd || cmd_to_run_if_chpasswd_failed

答案3

如果我理解正确的话,您将尝试仅使用语句并按 Enter 键来更改 root 用户的密码,而无需进一步确认该过程。

我发现如果您添加“sudo su”前缀,您的语句可以正常运行。

~$ sudo su

考虑到您正在尝试更改 root 用户的密码,您必须知道 root 用户名是什么并正确登录。您可以使用须藤苏命令。

然后运行以下命令就足够了,将“root”替换为当前的 root 用户名,将“my pass”替换为该用户所需的密码(请记住尝试此方法时请记下):

~$ echo "root:mypass" | chpasswd

在您可以探测输入后出口命令和登录使用新密码的命令。

相关内容