Git 为什么read会挂起我的bash脚本?
我在Python中使用Git 为什么read会挂起我的bash脚本?,git,bash,unix,git-post-receive,post-receive-email,Git,Bash,Unix,Git Post Receive,Post Receive Email,我在Python中使用readlines()时遇到了类似的问题,但我不确定这里的问题是否相同 read命令正在挂起我的bash脚本 generate_email() { # --- Arguments oldrev=$(git rev-parse $1) newrev=$(git rev-parse $2) refname="$3" # ... some code ... } # ... more code ... while read oldrev
readlines()
时遇到了类似的问题,但我不确定这里的问题是否相同
read
命令正在挂起我的bash脚本
generate_email()
{
# --- Arguments
oldrev=$(git rev-parse $1)
newrev=$(git rev-parse $2)
refname="$3"
# ... some code ...
}
# ... more code ...
while read oldrev newrev refname
do
generate_email $oldrev $newrev $refname
done
有没有办法解决这个问题?我想说的是,它没有挂起,只是在等待输入
但是要小心,确保生成的电子邮件不会从相同的输入流中读取。我想说它不是挂起的,只是在等待输入
但是要小心,并确保生成的电子邮件不会从同一输入流中读取。您没有告诉read从任何内容读取。所以它只是在等待来自
stdin
的输入
如果要读取文件,则需要使用read
,如下所示:
while read -r oldrev newrev refname; do
generate_email "$oldrev" "$newrev" "$refname"
done < /path/to/file
grep 'stuffInFile' /path/to/file |
while read -r oldrev newrev refname; do
generate_email "$oldrev" "$newrev" "$refname"
done
你不是在告诉雷德什么都要读。所以它只是在等待来自
stdin
的输入
如果要读取文件,则需要使用read
,如下所示:
while read -r oldrev newrev refname; do
generate_email "$oldrev" "$newrev" "$refname"
done < /path/to/file
grep 'stuffInFile' /path/to/file |
while read -r oldrev newrev refname; do
generate_email "$oldrev" "$newrev" "$refname"
done
正如亨克指出的,如果
generate\u email
也在从stdin读取,则必须小心。要从输入流中读取,而不将while
循环转换为子shell(这将导致循环中设置的任何变量值在退出时丢失),请使用进程替换而不是管道<代码>读取时-r。。。完成<正如Henk指出的,如果generate\u email
也在从stdin读取,则必须小心。要在循环进入子shell时从输入流中读取而不将(这将导致循环中设置的任何变量值在退出时丢失),请使用进程替换而不是管道<代码>读取时-r。。。done<似乎您希望解析输入(带有3个分隔参数)。你需要把它插进去。要么将该输入传递给上面包含的脚本,要么显式传递给while循环([some command]| while read oldrev newrev refname…
)。似乎您希望解析输入(带有3个分隔参数)。你需要把它插进去。将该输入传递给上面包含的脚本,或者显式地传递给while循环([some command]| while read oldrev newrev refname…
)。