在bash脚本中使用spawn和expect记录远程错误

时间:2014-01-07 07:31:26

标签: git bash shell expect

我目前正在使用expect脚本将数据从git存储库推送到其他服务器。但我想记录来自远程存储库的错误消息。

这是spawn的以下代码行。

spawn git push --force user@ip:/var/git/repo.git master 2> >(tee /home/user/error.log >&2)

但上面的代码不起作用,它会抛出错误:

error: src refspec 2> does not match any.
error: src refspec >(tee does not match any.
error: src refspec /home/user/error.log does not match any.
error: src refspec >&2) does not match any.

我也尝试过:

$(spawn git push --force user@ip:/var/git/repo.git) > /home/user/output.log

但它仍然无效。

我的主要动机是记录我从远程存储库获取的错误消息,并将它们显示到输出屏幕。

感谢。

编辑1:  当使用“glenn jackman”回答时,它会记录所有内容,回显消息以及错误消息,但我只会记录错误消息。

remote: changing directory to the one which is not available
remote: hooks/post-receive: line 5: cd: someunknown: No such file or directory

1 个答案:

答案 0 :(得分:0)

期望不了解bash进程替换语法。如果你需要它,你需要生成bash来执行它:

spawn bash -c {git push --force user@ip:/var/git/repo.git master 2> >(tee /home/user/error.log >&2)}

注意大括号的使用:expect的大括号就像shell的单引号一样:将一些单词组合为一个没有变量或命令插值的单个字符串。