在bash中获取带有EOF的FOR输出

时间:2016-09-26 14:42:15

标签: linux git bash shell scripting

我已经创建了一个bash脚本来临时帮助我根据提交的ID将一些文件发送到FTP服务器,我得到最后一次提交,跟踪文件并发送如下所示。

#!/bin/bash

commit_hash=$(git log --format="%H" -n 1)

[[ -z "$1" ]] || commit_hash=$1

files=$(git diff-tree --no-commit-id --name-only -r $commit_hash)

echo -e $(git log -1 $commit_hash --pretty=format:"%h - %an, %ar : %s");
printf "\n"

HOST=
USER=
PASS=

for file in $files; do
ftp -nv $HOST << EOF
user $USER $PASS
cd /www/example
passive
put $file
bye
EOF

done;

当然这不是最好的方法,但我自动化了一些我目前正在处理的事情。

可以捕获heredoc的ftp输出并应用一些过滤器吗?以管道为例,我只想知道转移是否成功完成。

2 个答案:

答案 0 :(得分:1)

  

可以捕获heredoc的ftp输出并应用一些过滤器吗?以管道为例,我只想知道转移是否成功完成。

我认为你的意思是你想要捕获其输入从heredoc重定向的ftp命令的输出; heredoc本身没有输出,除了相关命令之外的任何东西都可以看到。

但您可以重定向命令的输出。要记住的是,heredoc从下一行开始,而不是在关联的重定向运算符之后立即开始。因此,您可以在heredoc运算符之后将管道添加到另一个命令。例如:

$ cat << EOF | grep flag
flag this line
not this line
or this line
flag this
last flag
EOF

输出:

flag this line
flag this
last flag

答案 1 :(得分:1)

请勿使用retry count循环。请参阅Bash FAQ 001

last number