2014-02-17 1 views
1

У меня есть вопрос в Баш:проверки состояния затем ответить на вопросы авто

Это способ проверить условия, то автоматически отвечать на вопросы, как то, что произошло в heredoc?

Я знаю два способа, которые мы можем автоматически отвечать на вопросы (делая примеры по passwd команды):

1) трубопроводов

<password> | passwd <username> 

2) heredocs

passwd <username> <<EOF 
<password> 
<password> 
EOF 

Теперь, вопрос :

Как можно поставить условие, чтобы ответить на них ///

if [ `passwd` -eq 0 ]; then 
    <<EOF 
    <password> 
    <password> 
    EOF 
fi 

, например, это не представляется возможным, любая идея?

#!/bin/bash                                          

mdadm mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdc1 /dev/sdd1 /dev/sde1 --spare-devices=1 /dev/sdf1 
if [ $? -eq 0 ]; then 
    <<EOF                                           
    ok                                           
EOF                                            
elif [ $? -ne 0]; then 
    <<EOF                                           
    failed                                          
EOF                                            
fi 

heredocs и piping или любые другие решения приветствуются,

Я хочу в первую очередь проверить условия после этого быть в состоянии ответить на вопросы

Благодарности

+0

Вы спрашиваете: «Как можно поставить условие ...». Вы не можете запустить команду и получить ее статус выхода ($?), А затем отправить дополнительный ввод этой команде, потому что по определению ее статус выхода недоступен до тех пор, пока он не выйдет - в этот момент его слишком поздно отправить ничего лишнего. –

+0

Это не то, что я спросил ... это то, что я хочу: сначала запустить команду после этого, если она была истина (она задает вопрос), а затем проверить условие, после чего автоматически ответьте на это ... – MLSC

+1

Если вы являетесь автоответчиком вопрос, который запросила программа, программа должна будет продолжать читать ваш ответ - в этом случае его статус выхода не будет доступен. –

ответ

3

С планирующим команду, может быть?

http://www.thegeekstuff.com/2010/12/5-expect-script-command-line-argument-examples/

Вот маленький пример с FTP, так как я не знаком с mdadm. Вы можете видеть, что он делает что-то другое в зависимости от ответа с сервера - что я думаю, что вы пытаетесь сделать.

# Connect to the FTP server using the "spawn" command. 
    spawn ftp $hostname 

    # Wait for a login prompt. 
    expect -re "(Name|login|Login|Username).*:.*" { 

     # Login prompt received. Send username to server. 
     exp_send "$username\r" 
     exp_send_user "sent username\n" 
    } eof { 

     # No login prompt received. Display an error. 
     exp_send_user "could not connect\n" 
    } 
+2

Спасибо, вы можете ответить лучше, а не ссылку – MLSC

-1

Я предполагаю, что вы хотите проверить результат своего действия. Вы можете сделать это в два этапа:

passwd <user> <<EOF 
    <password> 
    <password> 
EOF 

if [ $? -eq 0 ]; then 
    echo "Great success" 
fi 

$? имеет код возврата последнего выполненного оператора.

+0

см. Мое обновление ... Я знаю, как проверить результаты в таких вещах, я говорю об автоответчиках – MLSC