Top*_*gio 14 git bash scripting indentation
我试图编写一个bash脚本,我很难使输出看起来整洁有序.我可以使用换行符,但我宁愿让输出易于阅读.例如,当我运行时git clone ...,我想首先回显"克隆存储库",然后输出git缩进.示例输出:
Cloning repository...
Initialized empty Git repository in /root/client_scripts/jojo/.git/
remote: Counting objects: 130, done.
remote: Compressing objects: 100% (121/121), done.
remote: Total 130 (delta 13), reused 113 (delta 6)
Receiving objects: 100% (130/130), 176.07 KiB, done.
Resolving deltas: 100% (13/13), done.
Run Code Online (Sandbox Code Playgroud)
目前,它都是压缩而没有缩进.有谁知道如何做到这一点?我尝试过sed,awk但它似乎没有显示任何更多的输出而不仅仅是Initialized empty Git repository in /root/client_scripts/jojo/.git/.我非常感谢任何评论.
Joe*_*oey 42
穿过
sed "s/^/ /g"
Run Code Online (Sandbox Code Playgroud)
这将替换行开始的(零宽度)锚点四个空格,有效地在行的开头添加四个空格.
(g在全局范围内执行此操作;没有它,它只执行一次,这将执行第一行.)
您可以通过sed过滤要缩进的命令的输出.
/tmp/test>cat script
#!/bin/sh
echo "Running ls -l"
ls -l 2>&1 | sed 's/^/\t/'
/tmp/test>sh script
Running ls -l
total 4
-rw-rw-r-- 1 hlovdal hlovdal 55 2009-11-03 23:36 script
/tmp/test>
Run Code Online (Sandbox Code Playgroud)
sed命令将使用制表器替换行的开头(在第一个字符之前),即在行的最开头插入制表符.
更新为缩进stderr.
一个不需要sed的不同解决方案:
command | (while read; do echo " $REPLY"; done)
Run Code Online (Sandbox Code Playgroud)
通过任何命令管理git输出的问题是git将检测输出不是终端,因此它不会输出作为进度消息的消息,因为(通常)管道很多终端字符没用并对非终端的内容进行更新.
无论如何要获得进度消息,您需要提供--verbose选项git clone.显示进度消息,stderr因此您可能需要管道2>&1 | ....
请注意,进度消息不会逐行显示,但是您将获得许多旨在清除同一行的终端转义码.尝试通过像sed这样的基于行的工具进行管道来缩进此输出可能会很难,如果不是不可能的话.对于可以处理无缓冲输入的程序,应该可以^M在输出中查找a 并立即向后添加一些空格(或制表符),并在收到每批数据时经常刷新.