ฉันกำลังพยายามเขียนฟังก์ชั่นเสร็จสิ้นสำหรับฟังก์ชั่นที่กำหนดเองบางอย่างที่ฉันเขียน แต่ดูเหมือนจะดิ้นรนกับแม้แต่พื้นฐานที่สุด
ฟังก์ชั่นตัวอย่างคือ:
function eb_instances() {
    if [ "$#" -ne 2 ]; then
        echo "Usage eb_instances <aws profile name> <environment name>"
        echo "e.g.:"
        echo " eb_instances production kraken-prod-api"
        return 1
    fi
    aws ec2 describe-instances --filters  "Name=instance-state-name,Values=running"   "Name=tag:Name,Values=$2" --profile=$1 --output=json | jq -r ".Reservations[].Instances[].PrivateIpAddress"
}
สิ่งนี้มีสองข้อโต้แย้งตำแหน่ง<aws profile name>และ<environment name>
ฉันต้องการตัวเลือกเสร็จสิ้นเพื่อ<aws profile name>ให้สามารถใช้ได้แบบไดนามิกโดยการทำงาน 
 sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' 'และความสำเร็จในการที่จะสามารถใช้งานได้แบบไดนามิกโดยการเรียกใช้ฟังก์ชั่นอื่นเราได้เรียก<environment name>eb_names
ฉันพบเอกสารค่อนข้างเบาบางและติดตามยาก ฉันยังเห็น repo zsh-completions สำหรับคำสั่งที่คล้ายกัน แต่ดูเหมือนจะไม่พบสิ่งที่คล้ายกับสิ่งที่ฉันต้องการ
ความช่วยเหลือใด ๆ ในการเริ่มต้นจะได้รับการชื่นชมมาก!
ปรับปรุง
จากคำตอบของ @ cuonglmฉันใช้:
#compdef ebinstances
_ebinstances() {
  local state
  _arguments \
    '1: :->aws_profile'\
    '*: :->eb_name'
  case $state in
    (aws_profile) _arguments '1:profiles:($(sed -n -E "s/\[([a-zA-Z0-9_\-]+)\]/\1/p" ~/.aws/credentials | tr \\n " "))' ;;
              (*) compadd "$@" foo bar
  esac
}
_ebinstances "$@"
สิ่งที่ฉันลืมที่จะพูดถึงในคำถามเดิมคือฉันต้องการให้อาร์กิวเมนต์ที่สองสมบูรณ์ขึ้นอยู่กับข้อแรก (ซึ่งทั้งคู่เป็นแบบไดนามิกที่ใช้รหัสบางอย่าง):
$ eb_instances <cursor>TAB
cuonglm  test
ได้รับความสำเร็จที่ฉันต้องการ เมื่อฉันเลือกพูดคำแรกและพยายามทำให้สมบูรณ์โดยอัตโนมัติ:
$ eb_instances cuonglm <cursor>TAB
ฉันต้องการที่จะสร้างตัวเลือกเสร็จสิ้นโดยการดำเนินการeb_names cuonglmและถ้าเป็นไปได้ยังเจาะลึกเนื้อหาเกี่ยวกับความสำเร็จตัวอย่างเช่นถ้าผู้สมัครที่ถูกต้องคือfoo-bar,
$ eb_instances cuonglm foo<cursor>TAB
ฉันต้องการสร้างตัวเลือกการทำให้สมบูรณ์ด้วยการดำเนินการ eb_names cuonglm foo
cuonglm testมาsed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '