我正在尝试更改我的 Ubuntu Amazon EC2 框上的每日消息 (MOTD),以便在我 SSH 进入时显示我的一个目录的 git 状态。
所有默认 MOTD 文件的输出在每行的开头都有两个空格,所以它看起来很好缩进,但是因为我的git status
输出跨越了几行,如果我echo -n " "
在它之前只缩进第一行。
知道如何让它缩进每一行吗?
通过管道将sed
其插入每行开头的 2 个空格。
git status | sed 's/^/ /'
基于@Barmar 的回答,这是一种更简洁的方法:
indent() { sed 's/^/ /'; }
git status | indent
other_command | indent
感谢@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
这是我写的一个函数也缩进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