我在bash中有一个问题:
这是检查条件的方法,然后自动回答heredoc
中发生的问题吗?
我知道两种方式可以自动回答问题(通过passwd
命令制作示例):
1)管道
<password> | passwd <username>
2)here文档
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 :(得分:3)
使用 expect 命令可能吗?
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"
}
答案 1 :(得分:-1)
我假设您要检查您的操作结果。您可以分两步完成此操作:
passwd <user> <<EOF
<password>
<password>
EOF
if [ $? -eq 0 ]; then
echo "Great success"
fi
$?
包含最后执行语句的返回码。