@@ -66,7 +66,7 @@ func createExecCommand() *cobra.Command {
6666 cmd := & cobra.Command {
6767 Use : "exec DEVCONTAINER_NAME COMMAND [args...]" ,
6868 Short : "Execute a command in a devcontainer" ,
69- Long : "Execute a command in a devcontainer, similar to `docker exec`." ,
69+ Long : "Execute a command in a devcontainer, similar to `docker exec`. Pass `?` as DEVCONTAINER_NAME to be prompted. " ,
7070 RunE : func (cmd * cobra.Command , args []string ) error {
7171
7272 if len (args ) < 2 {
@@ -80,14 +80,28 @@ func createExecCommand() *cobra.Command {
8080 }
8181
8282 containerID := ""
83- for _ , devcontainer := range devcontainers {
84- if devcontainer .ContainerName == devcontainerName || devcontainer .DevcontainerName == devcontainerName {
85- containerID = devcontainer .ContainerID
86- break
83+ if devcontainerName == "?" {
84+ // prompt user
85+ fmt .Println ("Specify the devcontainer to use:" )
86+ for index , devcontainer := range devcontainers {
87+ fmt .Printf ("%4d: %s (%s)\n " , index , devcontainer .DevcontainerName , devcontainer .ContainerName )
88+ }
89+ selection := - 1
90+ _ , _ = fmt .Scanf ("%d" , & selection )
91+ if selection < 0 || selection >= len (devcontainers ) {
92+ return fmt .Errorf ("Invalid option" )
93+ }
94+ containerID = devcontainers [selection ].ContainerID
95+ } else {
96+ for _ , devcontainer := range devcontainers {
97+ if devcontainer .ContainerName == devcontainerName || devcontainer .DevcontainerName == devcontainerName {
98+ containerID = devcontainer .ContainerID
99+ break
100+ }
101+ }
102+ if containerID == "" {
103+ return cmd .Usage ()
87104 }
88- }
89- if containerID == "" {
90- return cmd .Usage ()
91105 }
92106
93107 dockerArgs := []string {"exec" , "-it" , containerID }
0 commit comments