Bash脚本赢得';输入命令时不能退出
我有一个在git post commit钩子上运行的bash脚本。它所做的是请求用户输入,并根据输入触发另一个操作并退出 问题是,当操作运行时,它不会退出,这意味着当例如0被输入Bash脚本赢得';输入命令时不能退出,bash,git,npm,post-commit-hook,Bash,Git,Npm,Post Commit Hook,我有一个在git post commit钩子上运行的bash脚本。它所做的是请求用户输入,并根据输入触发另一个操作并退出 问题是,当操作运行时,它不会退出,这意味着当例如0被输入npm版本补丁运行并完成,但脚本挂起时。必须使用ctrl+c手动关闭它才能退出脚本 这是我的剧本: #!/bin/sh echo " Script app versioning started! " exec < /dev/tty while true; do read -p &q
npm版本补丁运行并完成,但脚本挂起时。必须使用ctrl+c
手动关闭它才能退出脚本
这是我的剧本:
#!/bin/sh
echo "
Script app versioning started!
"
exec < /dev/tty
while true; do
read -p "What version should the project update to?
- patch[x.x.1] press 0
- minor[x.1.x] press 1
- major[1.x.x] press 2
- skip patching press 3
" answer
case $answer in
[0] )
npm version patch ;
exit 0;;
[1] ) npm version minor;
exit 0;;
[2] ) npm version major;
exit 0;;
[3] ) echo "No version patched";
exit 0;;
* ) echo "Please answer 0, 1 or 2.";;
esac
done
echo "
Script app versioning ended!
"
exit 0
#/垃圾箱/垃圾箱
回声“
脚本应用程序版本控制已启动!
"
执行
是否由于命令exec
的重定向,当输入0,1或2时,npm版本补丁
命令将中断输出,因此它将在未触发exit 0
的情况下继续并挂起?
如果是这样,我该如何解决?尝试将输出重定向回,如exec>/dev/tty
,但不起作用
删除exec
将运行脚本并退出,但不会等待命令输入。我已通过重定向回我的stdout来修复脚本,如下所示:
#!/bin/sh
echo "
Script app versioning started!
"
exec < /dev/tty
while true; do
read -p "What version should the project update to?
- patch[x.x.1] press 0
- minor[x.1.x] press 1
- major[1.x.x] press 2
- skip patching press 3
" answer
case $answer in
[0] )
npm version patch ;
exit 0;;
[1] ) npm version minor;
exit 0;;
[2] ) npm version major;
exit 0;;
[3] ) echo "No version patched";
exit 0;;
* ) echo "Please answer 0, 1 or 2.";;
esac
done < "${1:-/dev/stdout}"
#/垃圾箱/垃圾箱
回声“
脚本应用程序版本控制已启动!
"
执行
#/bin/sh
-->应该是#/bin/sh
。似乎是个打字错误!不确定提交钩子是否可以访问tty终端。无论如何,您可以使用选择来实现菜单。示例:在“foo”栏“baz”中选择一个;做回显“$a”;打破done
read-p
是一个仅限bash的选项。您需要将shebang调整为bash,并确保脚本在钩子中与bash一起运行。首先为什么exec
在那里?我从来没有在脚本中看到过。你能试着在最后按ctrl-d吗?它应该关闭输入。