在下面的expect脚本中,如何在expect脚本中获取rsync的退出状态
if [$? -eq 0]
抛出错误
invalid command name "$?"
while executing
"$? -eq 0 "
invoked from within
"if [ $? -eq 0 ]"
(file "./tmp544.sh" line 7)
#!/usr/bin/expect -f
eval spawn ssh -l root 174.54.87.12 rsync /root/project /usr/project
expect "root@174.54.87.12's password: $"
send "\xxxxxxx\n"
expect "\\$ $"
if [ $? -eq 0 ]
then
echo "11"
else
echo "22"
fi
答案 0 :(得分:2)
if [$? -eq 0]
是一个shell构造,你在一个期望脚本中。 我认为你应该将rsync部分与ssh部分分开,并使用远程shell来评估rsync状态:
eval spawn ssh -l root 174.54.87.12
expect "root@174.54.87.12's password: $"
send "\xxxxxxx\n"
expect "\\$ $"
send "rsync /root/project /usr/project"
expect "\\$ $"
send "echo $?"
# Examine the output of $?
$?在交互式shell上可用,不仅在脚本中,您可以在命令行中使用它,这看起来是一个很好的机会!
我不太熟悉期望,但我猜想“\ $ $”正在等待shell提示,所以我盲目地复制粘贴它。