メニューは機能しますが、 |bash コマンドは機能しません。

メニューは機能しますが、 |bash コマンドは機能しません。

以下はこのように実行するとメニューが出るスクリプトですが./menu.sh、実行すると以下のようになります。./menu.sh | bash

見つからないコマンドがたくさん表示されます。

私がこのプログラムを実行したいのは、| bashそれがFTPサーバーにあり、別のリモート場所で実行する必要があるためです。だから私は単にcurl -sftp用にし、使用しなければコードだけを| bash印刷します。cat

    #!/bin/bash

#$path=./


while :
do
    echo " "
    echo " "
    echo "===== MAIN - MENU ====="


    echo "1. Run old sanity script"
    echo "2. Asterisk"
    echo "3. Audio"
    echo "4. CoCo"
    echo "5. Database"
    echo "6. Mobile"
    echo "7. SSH"
    echo "8. Touch"
    echo "9. VDS"
    echo "10. Wireshark"


    echo -----------------------
    echo "q. Quit"
    echo "r. Reload"
    echo "======================="

    echo -n "Please enter your choice: "
    read opt;
    echo " "
    echo " "

case $opt in


    1)  curl -s sanity_check.sh | bash;;
    2)  exec ./menu/asterisk/menu.sh;;
    3)  exec ./menu/audio/menu.sh;;
    4)  exec ./menu/coco/menu.sh;;
    5)  exec ./menu/database/menu.sh;;
    6)  exec ./menu/mobile/menu.sh;;
    7)  exec ./menu/ssh/menu.sh;;
    8)  exec ./menu/touch/menu.sh;;
    9)  exec ./menu/vds/menu.sh;;
    10)  exec ./menu/wireshark/menu.sh;;


    q)  echo " "
            echo "Bye Bye";
                exit 1;;
    Q)  echo " "
            echo "Bye Bye";
                exit 1;;

    r)  exec ./menu.sh;;
    R)  exec ./menu.sh;;

    *)  echo "$opt is an invaild option.";
            echo "Press [enter] key to continue. . .";
                read enterKey;;
esac
done

それは私に次のエラーを与えます:

bash: line 3: =====: command not found
bash: line 4: 1.: command not found
bash: line 5: 2.: command not found
bash: line 6: 3.: command not found
bash: line 7: 4.: command not found
bash: line 8: 5.: command not found
bash: line 9: 6.: command not found
bash: line 10: 7.: command not found
bash: line 11: 8.: command not found
bash: line 12: 9.: command not found
bash: line 13: 10.: command not found
bash: line 14: -----------------------: command not found
bash: line 15: q.: command not found
bash: line 16: r.: command not found
bash: line 17: =======================: command not found

しかし、私にとってこれはただのエコー命令です...それとも私が何かを見逃しているのでしょうか?

答え1

このコードを実行すると、テキストメニューが出力されます。あなたがやっていることは、./menu.sh | bashメニューをbash実行に入力することです。つまり、bash「このメニューを実行してください」という意味です。 bashメニュー内のテキストの意味がわからないため、エラーが発生します。

ただし、このスクリプトを使用する方法はありません。あなたはそれを(出力ではなくスクリプト)インポートして実行しようとします:

curl -o- 'ftp://.../menu.sh' | bash

これはパイプの左側にあるスクリプトを実行しませんが、ユーザーは./menu.sh | bash実行します。だからあなたが提案したことがうまくいくかもしれません。


また、ここでドキュメントを使用すると、複数行の出力が少し簡単になります。

cat <<END_MENU
===== MAIN - MENU =====
1. Run old sanity script
2. Asterisk
3. Audio
4. CoCo
5. Database
6. Mobile
7. SSH
8. Touch
9. VDS
10. Wireshark
-----------------------
q. Quit
r. Reload
=======================
END_MENU

この声明も調査select中ですbash。メニューを表示し、ユーザー入力を簡単にします(もちろん、メニューとオプションの特別な形式を望まない限り)。

caseステートメントで複数のパターンを実行することもできます。

q|Q)  echo 'Bye!'
      exit ;;

または

[qQ]) echo 'Bye!'
      exit ;;

exitしかし、ユーザーの要求がゼロ以外の終了コードを返すべきではないので)

答え2

スクリプトの出力をbashに送信しています。 bashが実行できるようにスクリプトテキストをbashに送信したくないですか?

cat menu.sh | bash

関連情報