Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本赢得';输入命令时不能退出_Bash_Git_Npm_Post Commit Hook - Fatal编程技术网

Bash脚本赢得';输入命令时不能退出

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

我有一个在git post commit钩子上运行的bash脚本。它所做的是请求用户输入,并根据输入触发另一个操作并退出

问题是,当操作运行时,它不会退出,这意味着当例如0被输入
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吗?它应该关闭输入。