菜单可以工作,但不能使用 |bash 命令

菜单可以工作,但不能使用 |bash 命令

下面是一个显示菜单的脚本,当我像./menu.sh它一样运行它时,但是当我像这样运行它时:./menu.sh | bash

我收到很多未找到的命令。

我想运行它的原因| bash是因为它将位于 ftp 服务器上,并且我需要从不同的远程位置运行它。所以我只是curl -s对 ftp进行操作,如果我不使用,| 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

但对我来说这些只是 echo 命令......或者我错过了什么

答案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

相关内容