Bash 脚本不会在输入命令时退出
Bash script won't exit on input command
我有一个 bash 脚本 运行 在 git post-commit 挂钩上。它所做的是要求用户输入,并根据输入触发另一个动作并退出。
问题是当操作为 运行 时它不会退出,这意味着当例如输入 0 npm version patch
运行s 并完成但脚本挂在那里。必须使用 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 < /dev/tty
的重定向,当输入 0,1 或 2 并且 npm version patch
命令将中断输出,所以它将继续而没有 exit 0
被触发并挂起?
如果是这样,我该如何解决?试图像 exec > /dev/tty
一样将输出重定向回来,但没有用。
删除 exec < /dev/tty
将 运行 脚本并退出,但不会等待我的命令输入。
我已经通过像这样重定向回我的标准输出来修复我的脚本:
#!/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}"
我有一个 bash 脚本 运行 在 git post-commit 挂钩上。它所做的是要求用户输入,并根据输入触发另一个动作并退出。
问题是当操作为 运行 时它不会退出,这意味着当例如输入 0 npm version patch
运行s 并完成但脚本挂在那里。必须使用 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 < /dev/tty
的重定向,当输入 0,1 或 2 并且 npm version patch
命令将中断输出,所以它将继续而没有 exit 0
被触发并挂起?
如果是这样,我该如何解决?试图像 exec > /dev/tty
一样将输出重定向回来,但没有用。
删除 exec < /dev/tty
将 运行 脚本并退出,但不会等待我的命令输入。
我已经通过像这样重定向回我的标准输出来修复我的脚本:
#!/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}"