【问题标题】:Online bash script that calls another script ignore functions and commands调用另一个脚本的在线 bash 脚本忽略函数和命令
【发布时间】:2023-02-11 08:56:19
【问题描述】:

我写了一个 bash 脚本来下载另一个脚本。要运行第一个脚本,我使用

curl -s get.domain.com | bash

我使用以下脚本下载:

#!/bin/bash

setup_dir=$(dirname "$(readlink -f $0)")
setupbuild=$vmsetup_dir/setupbuild
fileslocation=files.domain.com

wget -r -np -nH -A .sh ${fileslocation} -P ${setupbuild}
find ${setupbuild} -name "*.sh" -exec chmod +x {} +

exec ${vmsetupbuild}/menu.sh

在脚本的最后,我想运行下载的脚本。这是出了问题的地方,我根本不明白。

被调用脚本的菜单似乎有效。然而,当做出选择时,回声被忽略并且出口也没有做任何事情。

如果我从提示中启动脚本,一切都会按预期进行。

我曾尝试在不同的地方放置一个 if,但这也无济于事。似乎被调用脚本中的某些内容被忽略了。

菜单.sh:

#!/bin/bash

main_menu() {
  clear
  echo "1) Option 1"
  echo "2) Option 2"
  echo "3) Other option"
  echo "4) Quit"
  read -p "Enter your choice: " main_menu_choice
  case $main_menu_choice in
  1)
    option1
    main_menu
    ;;
  2)
    option2
    main_menu
    ;;
  3)
    other_option
    main_menu
    ;;
  4)
    echo "Exit"
    exit 1
    ;;
  *)
    echo "Invalid option. Please try again."
    sleep 2
    main_menu
    ;;
  esac
}

option1() {
  echo "You chose option1."
  sleep 2
}

option2() {
  echo "You chose option2."
  sleep 2
}

other_option() {
  echo "You chose other option."
  sleep 2
}

main_menu

【问题讨论】:

  • 脚本的标准输入连接到管道,而不是终端。

标签: linux bash


【解决方案1】:

该脚本正在从管道读取标准输入,因此您无法响应终端的提示。

当它执行menu.sh 时,您可以将输入重定向回终端。

exec ${vmsetupbuild}/menu.sh < /dev/tty

【讨论】:

    猜你喜欢
    • 2014-04-04
    • 2020-05-02
    • 2013-03-13
    • 1970-01-01
    • 2020-02-10
    • 2014-12-26
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多