使用另一个函数的用户提示调用bash函数
我有一个bash脚本,其中包含一个创建AWS实例的函数。它调用另一个创建卷的函数,并在调用函数中捕获该函数的输出。“创建卷”功能具有用户提示 在create_instances函数中,我有以下几行捕获create_volume的输出:使用另一个函数的用户提示调用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=()
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