Dans un contexte possédant des enfants dynamiques, il peut s'avérer utile d'itérer ces enfants par programmation. Ceci peut être réalisé à l'aide de la fonction list, qui renvoie un tableau d'enfants dynamiques.
script run('shares'); projects = list(); for (i = 0; i < projects.length; i++) { run('select ' + projects[i]); shares = list(); for (j = 0; j < shares.length; j++) { run('select ' + shares[j]); printf("%s/%s %1.64g %1.64g\n", projects[i], shares[j], get('space_data'), get('space_available')); run('cd ..'); } run('cd ..'); }
% ssh root@koi < space.aksh Password: admin/accounts 18432 266617007104 admin/exports 18432 266617007104 admin/primary 18432 266617007104 admin/traffic 18432 266617007104 admin/workflow 18432 266617007104 aleventhal/hw_eng 18432 266617007104 bcantrill/analytx 1073964032 266617007104 bgregg/dashbd 18432 266617007104 bgregg/filesys01 26112 107374156288 bpijewski/access_ctrl 18432 266617007104 ...
script run('shares'); projects = list(); printf('%-40s %-10s %-10s\n', 'SHARE', 'USED', 'AVAILABLE'); for (i = 0; i < projects.length; i++) { run('select ' + projects[i]); shares = list(); for (j = 0; j < shares.length; j++) { run('select ' + shares[j]); share = projects[i] + '/' + shares[j]; used = run('get space_data').split(/\s+/)[3]; avail = run('get space_available').split(/\s+/)[3]; printf('%-40s %-10s %-10s\n', share, used, avail); run('cd ..'); } run('cd ..'); }
% ssh root@koi < prettyspace.aksh Password: SHARE USED AVAILABLE admin/accounts 18K 248G admin/exports 18K 248G admin/primary 18K 248G admin/traffic 18K 248G admin/workflow 18K 248G aleventhal/hw_eng 18K 248G bcantrill/analytx 1.00G 248G bgregg/dashbd 18K 248G bgregg/filesys01 25.5K 100G bpijewski/access_ctrl 18K 248G ...
Son format est le suivant : list ([depth, [filter]]). L'argument depth peut être défini par un nombre. Plus le nombre pour depth est élevé, plus le nombre de détails affichés sera important. L'argument filter se présente sous la forme suivante : {<prop1>:<val1>, <prop2>:<val2> ...}. Si filter est indiqué, depth doit l'être également.
Syntaxe et comportement de l'entrée :
list() - Renvoie uniquement des noms de noeuds.
list(0) - Renvoie les propriétés de noeud et uniquement les noms des enfants.
list(0, {kiosk_mode: true}) - Renvoie une liste filtrée lorsque la commande kiosk_mode est définie sur true avec les noms des enfants.
list(1) - Renvoie les propriétés de noeud, les noms et les propriétés des enfants, et uniquement les noms des petits-enfants.
list(1, {kiosk_mode: true}) - Renvoie une liste filtrée lorsque la commande kiosk_mode est définie sur true avec des détails jusqu'à depth=1.
list(2) - Renvoie les propriétés de noeud, les noms et propriétés des enfants, et la sortie list(0) des petits-enfants.
list(2, {fullname:'Super*', kiosk_mode: true}) - Renvoie une liste filtrée pour fullname contenant Super, lorsque la commande kiosk_mode est définie sur true avec des détails jusqu'à depth=2.
Le libellé name indique le nom de l'élément de liste (à savoir, un noeud). Le libellé properties indique les propriétés de l'élément de liste. Le libellé children indique les enfants statiques de l'élément de liste. Le libellé list indique les enfants dynamiques de l'élément de liste.
script ("." to run)> dump(list(2)); ("." to run)> . [{ name: 'restuser', properties: { kiosk_screen: 'status/dashboard', kiosk_mode: false, roles: ['basic'], require_annotation: false, initial_password: 'DummyPassword', fullname: 'REST User', logname: 'restuser' }, children: [{ name: 'preferences', properties: { advanced_analytics: false, session_timeout: 15, login_screen: 'status/dashboard', locale: 'C' } }, { name: 'exceptions', list: [{ name: 'auth-000', properties: { allow_configure: false, scope: 'alert' } }, { name: 'auth-001', properties: { allow_workgroup: false, allow_domain: false, name: '*', scope: 'ad' } }] }] }]