2017-09-10 65 views
1

錯誤啓動腳本testyon.sh後:「功能:未找到」 下Termux 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 ")") 
$ 

如何解決這個問題?

回答

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,這將防止你的功能問題。
+0

我認爲我們可以相當肯定* *無論shell *的確是**是POSIX shell。如果OP將明確地調用它作爲bash或Zsh,則錯誤消息的措辭將會不同。 – user1934428