"function: not found" Termux sh 下出错
"function: not found" error under Termux sh
启动脚本后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 ")")
$
如何解决?
我猜当你调用 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
,这将防止您的功能问题。
启动脚本后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 ")") $
如何解决?
我猜当你调用 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
,这将防止您的功能问题。