2014-09-05 51 views
-2

好吧,我有大量的服务器,我写了一个bash脚本来征集他们。但问题是,它滚动通过终端。如何在bash脚本中使用更多或更少

我需要这些的分页视图。

是否有可能在bash脚本中放入更多或更少的内容?

say , 
1 
. 
. 
. 
1000 

每页一页。

我有这样的代码:

Staging_Servers) 

    echo " Staging server list should go here" 
;; 

UAT_Servers) 

    echo " UAT server list should go here" 
;; 

Prod_Servers) 

echo " Prod server list should go here" 
;; 

而且其中一人有长列表。

当我运行该脚本,它显示的菜单如下图所示:

1) Jenkin_Servers 5) Prod_Servers  9) DB-Staging 
2) Nagios_Servers  6) Proxy_Servers  10) DB-Prod 
3) Staging_Servers  7) Dedicated_Servers 
4) UAT_Servers   8) Shared_Servers 
Please enter the required number : 

好了,一旦我给数以菜单的提示一个有很多的项目,其屏幕的滚动。我想一次只看一页。

+0

是的,这是可能的。你有什么尝试? – Biffen 2014-09-05 10:19:09

+0

'yourscript |少'是欺骗? ;) – jm666 2014-09-05 10:19:28

+0

我试图给它滚动虽然...不一样...我不清楚我的查询? @Buffen – user212064 2014-09-05 10:23:35

回答

0

是的,你可以调用一个bash脚本,或多或少:

#!/bin/bash 
... 
cat file* | less 
... 

将开始,一旦它到达cat(或者是任何命令)分页输出。

我用来编写了由第一线的README文件:

#!/usr/bin/less 

当你执行的自述,这将分页的自述。自分页文本文件。

0

将您的服务器列表存储在一个字符串或array中,并通过您的PAGER回显输出,或显式地通过减少。例如:

export PAGER='/usr/bin/less' 
case $list_name in 
    Staging_Servers) 
     echo "${staging_servers[@]}" | "$PAGER" 
     ;; 
    UAT_Servers) 
     echo "${uat_servers[@]}" | "$PAGER" 
     ;; 
    Prod_Servers) 
     echo "${prod_servers[@]}" | "$PAGER" 
     ;; 
esac 
+2

不要覆盖寻呼机的用户的设置,也只有这样做,如果输出是一个tty:'如果测试-t 1;那么P = $ {PAGER-less};别的P =猫; fi ... cmd | $ {P}'(适当地让用户设置PATH) – 2014-09-05 13:18:09

+0

@WilliamPursell对于这个答案的目的,一个根本无法承担* PAGER *设置,这里设置它使得答案自成体系。如果OP不想依靠* PAGER *,则OP总是可以更少或更少地进行硬编码。但是,一个*应该*假设一个tty/pty,因为它是一个面向用户的菜单。我的目标不是要解决每一个可能的边缘案例;只是OP的既定目标。因人而异。 – 2014-09-05 14:38:01

+0

用户在设置PAGER时应该始终遵守。这是一个常见的惯例,作为用户并运行覆盖这些事情的脚本是非常烦人的。你不需要解决每一个边缘案例,但是遵守标准约定是绝对必要的,特别是在回答介绍性问题时。 – 2014-09-05 16:55:51