在Termux sh下出现“function:not found”错误

时间:2017-09-10 17:32:57

标签: android shell termux

启动脚本testyon.sh后:

#!/bin/sh 
function yon { 
while true; do 
echo "Start proc?[Y/n]: "
read -r "[Y/n]: " yn 
case $yn in 
[Yy]*) echo "Starting" ; return 0 ;;
[Nn]*) echo "Stopped" ; return 1 ;; 
esac 
done }

我收到此错误:

$ sh testyon.sh
testyon.sh: 2: testyon.sh: function: not found
testyon.sh: 7: testyon.sh: Syntax error: newline unexpected (expecting ")")
$

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我想当你调用sh时运行的shell都会被函数语法抛出。声明函数的可移植方式是

yon () { 
    while true; do 
        echo "Start proc?[Y/n]: "
        read -r "[Y/n]: " yn 
        case $yn in 
            [Yy]*) echo "Starting" ; return 0 ;;
            [Nn]*) echo "Stopped" ; return 1 ;; 
        esac 
    done
}

参考:POSIX规范,Shell命令语言,Function Definition Command

两个评论:

  • 您似乎提示用户两次,但我不确定read -r命令中的提示是否完成任何操作。实际上,它似乎阻止了首先将任何内容读入yn
  • Termux带有一个完整的Bash生活在/data/data/com.termux/files/usr/bin/bash,这可以防止你的功能问题。