Valor de retorno dos comandos ao usar stdin?

2

Imaging Estou executando o seguinte comando:

echo "root:mypass" | chpasswd

Como posso obter o código de retorno / código de erro retornado pelo chpasswd? Isso é possível neste caso em tudo? Eu tentei

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

mas isso me dá apenas "comando não encontrado"?

    
por stefan.at.wpf 02.09.2012 / 22:16

3 respostas

7

O $? variável mantém o valor de retorno do último comando. Você poderia fazer isso:

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

Ou teste diretamente, por exemplo

echo "root:passwd" | chpasswd
if [ "$?" -ne 0 ]; then
  echo "Failed"
fi
    
por 02.09.2012 / 22:26
3

Se o valor de retorno não for importante, apenas se for bem-sucedido ou não, você poderá usar o comando em uma instrução if :

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

Ou o mais curto:

echo "root:mypass" | chpasswd || cmd_to_run_if_chpasswd_failed
    
por 02.09.2012 / 23:05
0

Se bem entendi, você está tentando alterar a senha do usuário root usando apenas uma instrução e pressionando Enter sem mais confirmação do processo.

Descobri que sua declaração é executada corretamente se você adicionar um prefixo "sudo su".

~$ sudo su

Considerando que você está tentando mudar a senha do usuário root, é necessário saber qual é o nome do usuário raiz e ser logado corretamente. Você pode fazer isso com o comando sudo su .

Em seguida, basta executar o comando follow substituindo "root" pelo nome da raiz atual e "my pass" pela senha desejada para esse usuário (lembre-se de tomar uma nota para tentar este método):

~$ echo "root:mypass" | chpasswd

Depois de investigar a inserção de um comando exit e do comando login usando a nova senha.

    
por 03.09.2012 / 05:03