我有一个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)"
答案 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