2017-09-10 1 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を呼び出すときに実行されるシェルは、関数の構文によって捨てられると思います。 POSIX仕様、シェルコマンド言語、Function Definition Command:関数を宣言するのポータブルな方法は

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 
} 

リファレンスです。

二つの発言:

  • あなたが二度ユーザを促しているように見えるが、私はread -rコマンドプロンプトでは全く何もしないかはわかりません。実際には何も最初にynに読み取れないようです。
  • Termuxにはフル機能のBashが/data/data/com.termux/files/usr/bin/bashにあり、機能上の問題を防ぐことができます。
+0

確かに、どんなシェル*が** POSIXシェルであるかは確信できます。もしOPが明示的にbashやZshのようにそれを呼び出すのであれば、エラーメッセージの言葉は違うでしょう。 – user1934428

関連する問題