2016-05-17 65 views
0

我试图以某种方式输出多个字符串,所以第二列保持缩进,即使例如终端太小并且必须在另一行上继续。 现在我的代码看起来是这样的:在bash中以表格形式缩进字符串输出

echo " --show=[name]  Show all packages, including"\ 
         "their version." 
echo "     Date format: dd.mm.yy" 
echo " --upgrade [pkg] Upgrade packages inside"\ 
         "current instance." 

    #Size of terminal with output 
    +--------------------------------------------+ 
    | --show=[name] Show all packages, includi| 
    |ng their version.       | 
    |     Date format: dd.mm.yy  | 
    | --upgrade [pkg] Upgrade packages inside cu| 
    |rrent instance.        | 
    +--------------------------------------------+ 

它减少文字把它扔了到下一行的开头没有任何压痕。我尝试使用标签,但没有改变任何东西。

我想要得到的输出调整到任何终端大小,因此它看起来像...

 +--------------------------------------------+ 
    | --show=[name] Show all packages,  | 
    |     including their version. | 
    |     Date format: dd.mm.yy  | 
    | --upgrade [pkg] Upgrade packages inside | 
    |     current instance.   | 
    +--------------------------------------------+ 

回答

0

传统的做法是使用实用程序与troff文本格式系统一起使用,但是现在我发现使用HTML和文本模式浏览器作为渲染器更容易。但是,所有渲染器都有自己的怪癖,所以您可能需要做一些变通。

w3m确实呈现的一个不错的工作,但它似乎并没有正确处理col元素,它不处理CSS,这意味着你需要指定的第一行的td元素列的宽度和每个td元素的垂直对齐。这有点乏味,所以我在下面用变量插值来做。

请注意,width属性的值是像素; w3m默认为每个字符8个像素,所以要制作一个15个字符宽的列,您需要指定width=120

随着那介绍,这里是你的表:

C1="<tr><td width=120 valign=top>" C="<td valign=top>" 
w3m -dump -T text/html -cols 45 <<EOT 
<table> 
${C1}--show=[name] 
    ${C}Show all packages, including their version.<br /> 
     Date format: dd.mm.yy 
${C1}--upgrade [pkg] 
    ${C}Upgrade packages inside current instance. 
</table> 
EOT 

和输出

--show=[name]  Show all packages, 
        including their version. 
        Date format: dd.mm.yy 
--upgrade [pkg] Upgrade packages inside 
        current instance. 

更改-cols 45-cols 80

--show=[name]  Show all packages, including their version. 
        Date format: dd.mm.yy 
--upgrade [pkg] Upgrade packages inside current instance. 

只是为了好玩,加入了由边界将<table>更改为<table border>

┌─────────────────┬────────────────────────┐ 
│--show=[name] │Show all packages,  │ 
│     │including their version.│ 
│     │Date format: dd.mm.yy │ 
├─────────────────┼────────────────────────┤ 
│--upgrade [pkg] │Upgrade packages inside │ 
│     │current instance.  │ 
└─────────────────┴────────────────────────┘ 

您也可以尝试其他任何文本模式的浏览器,如lynxelinks

-1

坏消息的echo功能我的Bash shell有时燕子空白(特别是当你把输入分成几行)。您可以尝试使用-e选项,迫使转义字符正确处理(你的'\'),或者,更好的在我看来,分裂以可控的方式行,以便您的代码将如下所示:

echo " --show=[name]  Show all packages, including" 
echo "     their version." 
echo "     Date format: dd.mm.yy" 
echo " --upgrade [pkg] Upgrade packages inside" 
echo "     current instance." 

这是我通常做的,它对我来说非常完美。