diff --git a/op-mode-definitions/include/vni-tagnode-all.xml.i b/op-mode-definitions/include/vni-tagnode-all.xml.i
index 18f74653b..fabab19d7 100644
--- a/op-mode-definitions/include/vni-tagnode-all.xml.i
+++ b/op-mode-definitions/include/vni-tagnode-all.xml.i
@@ -1,12 +1,12 @@
 <!-- included start from vni-tagnode-all.xml.i -->
 <tagNode name="vni">
   <properties>
     <help>VXLAN network identifier (VNI) number</help>
     <completionHelp>
       <list>&lt;1-16777215&gt; all</list>
-      <script>${vyos_completion_dir}/list_vni.py</script>
+      <script>${vyos_completion_dir}/list_vni.sh</script>
     </completionHelp>
   </properties>
   <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
 </tagNode>
 <!-- included end -->
diff --git a/op-mode-definitions/include/vni-tagnode.xml.i b/op-mode-definitions/include/vni-tagnode.xml.i
index 363da8d5e..f5b99dcc8 100644
--- a/op-mode-definitions/include/vni-tagnode.xml.i
+++ b/op-mode-definitions/include/vni-tagnode.xml.i
@@ -1,12 +1,12 @@
 <!-- included start from vni-tagnode.xml.i -->
 <tagNode name="vni">
   <properties>
     <help>VXLAN network identifier (VNI) number</help>
     <completionHelp>
       <list>&lt;1-16777215&gt;</list>
-      <script>${vyos_completion_dir}/list_vni.py</script>
+      <script>${vyos_completion_dir}/list_vni.sh</script>
     </completionHelp>
   </properties>
   <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
 </tagNode>
 <!-- included end -->
diff --git a/op-mode-definitions/show-evpn.xml.in b/op-mode-definitions/show-evpn.xml.in
index ba3b104cd..3c1e5c7d6 100644
--- a/op-mode-definitions/show-evpn.xml.in
+++ b/op-mode-definitions/show-evpn.xml.in
@@ -1,129 +1,129 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <node name="show">
     <children>
       <node name="evpn">
         <properties>
           <help>Show Ethernet VPN (EVPN) information</help>
         </properties>
         <children>
           <node name="access-vlan">
             <properties>
               <help>Access VLANs</help>
             </properties>
             <children>
               #include <include/frr-detail.xml.i>
             </children>
             <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
           </node>
           <tagNode name="access-vlan">
             <properties>
               <help>Access VLANs interface name</help>
               <completionHelp>
                 <script>${vyos_completion_dir}/list_interfaces --bridgeable --no-vlan-subinterfaces</script>
               </completionHelp>
             </properties>
             <children>
               <node name="node.tag">
                 <properties>
                   <help>VLAN ID</help>
                   <completionHelp>
                     <list>&lt;1-4094&gt;</list>
                   </completionHelp>
                 </properties>
                 <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
               </node>
             </children>
           </tagNode>
           <node name="arp-cache">
             <properties>
               <help>ARP and ND cache</help>
             </properties>
             <children>
               #include <include/vni-tagnode-all.xml.i>
             </children>
           </node>
           <tagNode name="es">
             <properties>
               <help>Show ESI information for specified ESI</help>
               <completionHelp>
                 <list>&lt;esi&gt;</list>
-                <script>${vyos_completion_dir}/list_esi.py</script>
+                <script>${vyos_completion_dir}/list_esi.sh</script>
               </completionHelp>
             </properties>
             <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
           </tagNode>
           <node name="es">
             <properties>
               <help>Show ESI information</help>
             </properties>
             <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
             <children>
               <leafNode name="detail">
                 <properties>
                   <help>Show ESI details</help>
                 </properties>
                 <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
               </leafNode>
             </children>
           </node>
           <node name="es-evi">
             <properties>
               <help>Show ESI information per EVI</help>
             </properties>
             <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
             <children>
               <leafNode name="detail">
                 <properties>
                   <help>Show ESI per EVI details</help>
                 </properties>
                 <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
               </leafNode>
               #include <include/vni-tagnode.xml.i>
             </children>
           </node>
           <node name="mac">
             <properties>
               <help>MAC addresses</help>
             </properties>
             <children>
               #include <include/vni-tagnode-all.xml.i>
             </children>
           </node>
           <node name="next-hops">
             <properties>
               <help>Remote VTEPs</help>
             </properties>
             <children>
               #include <include/vni-tagnode-all.xml.i>
             </children>
           </node>
           <node name="rmac">
             <properties>
               <help>RMAC</help>
             </properties>
             <children>
               #include <include/vni-tagnode-all.xml.i>
             </children>
           </node>
           #include <include/vni-tagnode.xml.i>
           <node name="vni">
             <properties>
               <help>Show VNI information</help>
             </properties>
             <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
             <children>
               <leafNode name="detail">
                 <properties>
                   <help>Show VNI details</help>
                 </properties>
                 <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
               </leafNode>
             </children>
           </node>
         </children>
         <command>${vyos_op_scripts_dir}/evpn.py show_evpn --command "$*"</command>
       </node>
     </children>
   </node>
 </interfaceDefinition>
diff --git a/src/completion/list_esi.py b/src/completion/list_esi.sh
old mode 100644
new mode 100755
similarity index 50%
rename from src/completion/list_esi.py
rename to src/completion/list_esi.sh
index fc40f37b6..b8373fa57
--- a/src/completion/list_esi.py
+++ b/src/completion/list_esi.sh
@@ -1,31 +1,20 @@
-#!/usr/bin/env python3
+#!/bin/bash
 #
-# Copyright (C) 2016-2024 VyOS maintainers and contributors
+# Copyright (C) 2024 VyOS maintainers and contributors
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 or later as
 # published by the Free Software Foundation.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
-# This script is completion helper to list all configured VNIs that are visible to FRR
+# This script is completion helper to list all valid ESEs that are visible to FRR
 
-import json
-from vyos.utils.process import cmd
-
-def get_esi():
-    esiDict = json.loads(cmd(f"vtysh -c 'show evpn es json'"))
-    esiList = []
-    for i in esiDict:
-        esiList.append(i['esi'])
-
-    print(' '.join(esiList))
-
-if __name__ == '__main__':
-    get_esi()
+esiJson=$(vtysh -c 'show evpn es json')
+echo "$(echo "$esiJson" | jq -r '.[] | .esi')"
diff --git a/src/completion/list_vni.py b/src/completion/list_vni.sh
old mode 100644
new mode 100755
similarity index 63%
rename from src/completion/list_vni.py
rename to src/completion/list_vni.sh
index ef78eb16f..f8bd4a993
--- a/src/completion/list_vni.py
+++ b/src/completion/list_vni.sh
@@ -1,27 +1,20 @@
-#!/usr/bin/env python3
+#!/bin/bash
 #
-# Copyright (C) 2016-2024 VyOS maintainers and contributors
+# Copyright (C) 2024 VyOS maintainers and contributors
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 or later as
 # published by the Free Software Foundation.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 # This script is completion helper to list all configured VNIs that are visible to FRR
 
-import json
-from vyos.utils.process import cmd
-
-def get_vni():
-    vniDict = json.loads(cmd(f"vtysh -c 'show evpn vni json'"))
-    print(' '.join(vniDict.keys()))
-
-if __name__ == '__main__':
-    get_vni()
+vniJson=$(vtysh -c 'show evpn vni json')
+echo "$(echo "$vniJson" | jq -r 'keys | .[]')"