在具有动态子代的上下文中,以编程方式迭代这些子代可能非常有用。这可以使用 list 函数实现,该函数返回动态子代数组。
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 ...
格式为:list ([depth, [filter]])。参数 depth 可指定为一个数字。depth 的数值越大,返回的信息越详细。参数 filter 采用 {<prop1>:<val1>, <prop2>:<val2> ...} 格式。如果指定 filter,则还必须指定 depth。
用法和输入行为:
list()-仅返回节点名称。
list(0)-返回节点属性和子节点名称。
list(0, {kiosk_mode: true})-如果 kiosk_mode 为 true,返回过滤后的列表,其中包含子节点的名称。
list(1)-返回节点的属性、子节点的名称和属性、孙节点的名称。
list(1, {kiosk_mode: true})-如果 kiosk_mode 为 true,返回过滤后的列表,其中包含的详细信息具体到 depth=1。
list(2)-返回节点的属性、子节点的名称和属性以及孙节点的 list(0) 输出。
list(2, {fullname:'Super*', kiosk_mode: true})-如果包含 Super 和 kiosk_mode 的 fullname 为 true,返回过滤后的列表,其中包含的详细信息具体到 depth=2。
标签 name 显示列表项(即,节点)的名称。标签 properties 显示列表项的属性。标签 children 显示列表项的静态子代。标签 list 显示列表项的动态子代。
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' } }] }] }]