Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用另一个函数的用户提示调用bash函数_Bash - Fatal编程技术网

使用另一个函数的用户提示调用bash函数

使用另一个函数的用户提示调用bash函数,bash,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=()

我有一个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_instances函数中捕获create_volume的输出并允许create_volume函数中需要的提示


我需要在使用此管道时显示提示:
卷[$I]=“$(创建卷)”

使用
-p
选项以设置提示。剩下的就交给你了:

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
在管道中,它们不是:

$ volume_id=$( printf '%s\n' foo bar baz | create_volume )
$ echo "$volume_id"
>>> foo,bar,baz

使用
read
-p
选项设置提示。剩下的就交给你了:

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
在管道中,它们不是:

$ volume_id=$( printf '%s\n' foo bar baz | create_volume )
$ echo "$volume_id"
>>> foo,bar,baz

将提示写入stderr,而不是stdout。如果希望函数在同一个shell实例中运行,而不是在子shell中运行,则需要对输出使用间接赋值,而读取时已经这样做了。将提示写入stderr,不是stdout。如果希望函数在同一个shell实例中运行,而不是在子shell中运行,则需要对输出使用间接赋值,而
read
已经这样做了。create\u volume函数正在提示用户。但我需要在调用此管道时显示提示:
volumes[$I]=“$(创建卷)”
这是不可能的吗?Thanks@bluethundr正如@glenn所说,读取
-p
选项应该解决这个问题。至少对我有用,很有趣。p提示符从被调用函数(create_volume)在调用函数(create_实例)中进行提示。但我看到的是create\u volume中的
read-rp volume\u size
行中的
volume\u size
。但我需要的是出现在调用函数中的提示行:`printf“Enter size:”。通过调用函数(创建实例)有什么方法可以做到这一点吗?您忘记了
-p
的参数:
read-rp“Enter size:”volume\u size
--您得到的是
read-rp volume\u size
,提示是字符串“volume\u size”该值进入默认变量
$REPLY
创建音量函数提示用户。但我需要在调用此管道时显示提示:
volumes[$I]=“$(创建卷)”
这是不可能的吗?Thanks@bluethundr正如@glenn所说,读取
-p
选项应该解决这个问题。至少对我有用,很有趣。p提示符从被调用函数(create_volume)在调用函数(create_实例)中进行提示。但我看到的是create\u volume中的
read-rp volume\u size
行中的
volume\u size
。但我需要的是出现在调用函数中的提示行:`printf“Enter size:”。调用函数(创建实例)有什么方法可以做到这一点吗?您忘记了
-p
的参数:
read-rp“Enter size:”volume\u size
--您得到的是
read-rp volume\u size
,其中提示符是字符串“volume\u size”,值进入默认变量
$REPLY