我正在尝试在我的Ubuntu Amazon EC2盒子上更改当天的消息(MOTD),这样当我进入SSH时它会显示我的一个目录的git状态。
所有默认MOTD文件的输出在每行的开头都有两个空格,因此它看起来很好地缩进,但因为我的git status
输出跨越了几行,如果我在它之前做echo -n " "
只缩进第一行。
知道我怎么能让它缩进每一行?
谢谢!
答案 0 :(得分:84)
将其传送到sed
以在每行的开头插入2个空格。
git status | sed 's/^/ /'
答案 1 :(得分:31)
根据@ Barmar的回答,这是一个更为简洁的方法:
indent() { sed 's/^/ /'; }
git status | indent
other_command | indent
答案 2 :(得分:2)
感谢@Barmar和@Marplesoft提供了一些不错的简单解决方案-这是其他人可能会喜欢的另一种变体-该函数可以使用pr
来区分多少个缩进级别:
indent() {
local indentSize=2
local indent=1
if [ -n "$1" ]; then indent=$1; fi
pr -to $(($indent * $indentSize))
}
# Example usage
ls -al | indent
git status | indent 2
答案 3 :(得分:0)
这是我编写的一个函数,用于缩进 stderr:
function indented {
local PIPE_DIRECTORY=$(mktemp -d)
trap "rm -rf '$PIPE_DIRECTORY'" EXIT
mkfifo "$PIPE_DIRECTORY/stdout"
mkfifo "$PIPE_DIRECTORY/stderr"
"$@" >"$PIPE_DIRECTORY/stdout" 2>"$PIPE_DIRECTORY/stderr" &
local CHILD_PID=$!
sed 's/^/ /' "$PIPE_DIRECTORY/stdout" &
sed 's/^/ /' "$PIPE_DIRECTORY/stderr" >&2 &
wait "$CHILD_PID"
rm -rf "$PIPE_DIRECTORY"
}
像这样使用:
indented git status
indented ls -al