通过其他功能的用户提示调用bash功能

时间:2018-08-22 18:12:14

标签: bash

我有一个bash脚本,其中包含创建AWS实例的函数。它调用另一个创建卷并在调用函数中捕获该函数输出的函数。创建卷功能具有用户提示。

在create_instances函数中,这些行捕获了create_volume的输出:

create_instances() {
  ...lines to create the instance...
  printf "Number of volumes to add: "
  read -r num_volumes
  volumes=()
  for (( i=0; i < num_volumes; i++ )); do
    volumes[$i]="$(create_volume)"
      .... lines to attach volume...
   done

}

并且没有任何提示出现在屏幕上,就像单独调用create_volume时一样。

在create_volume函数中,我提示用户询问卷的大小,可用区,卷名等。当create_instances调用此函数以获取输出时,create_instances挂起并等待用户输入。发生这种情况时,您在屏幕上看不到任何东西。

create_volume() {
    printf "Enter a volume name: "
    read -r volume_name

    #Availability Zones
    printf "Enter availability zone\\nExample. Type out: us-east-1a\\n"
    printf "AZ: "
    read -r availability_zone
    echo

    # Volume Size
    printf "Enter size: "
    read -r volume_size
    echo

    ...lines that create the volume...
    echo "$volume_id"
}

如何在create_instances函数中捕获create_volume的输出,并允许create_volume函数中所需的提示?

我需要在使用以下管道时出现提示:volumes[$i]="$(create_volume)"

1 个答案:

答案 0 :(得分:3)

使用-p的{​​{1}}选项设置提示。剩下的事就解决了:

read

交互式显示提示

create_volume() {
    local volume_name availability_zone volume_size
    read -rp "Enter a volume name: " volume_name
    read -rp $'Enter availability zone\nExample. Type out: us-east-1a\nAZ: ' availability_zone
    read -rp "Enter size: " volume_size

    # ...lines that create the volume...
    local volume_id="$volume_name,$availability_zone,$volume_size"
    echo ">>> $volume_id"
}

在管道中,它们不是:

$ create_volume
Enter a volume name: a
Enter availability zone
Example. Type out: us-east-1a
AZ: b
Enter size: c
>>> a,b,c