90

我正在尝试更改我的 Ubuntu Amazon EC2 框上的每日消息 (MOTD),以便在我 SSH 进入时显示我的一个目录的 git 状态。

所有默认 MOTD 文件的输出在每行的开头都有两个空格,所以它看起来很好缩进,但是因为我的git status输出跨越了几行,如果我echo -n " "在它之前只缩进第一行。

知道如何让它缩进每一行吗?

4

4 回答 4

145

通过管道将sed其插入每行开头的 2 个空格。

git status | sed 's/^/  /'
于 2013-07-05T08:53:58.110 回答
47

基于@Barmar 的回答,这是一种更简洁的方法:

indent() { sed 's/^/  /'; }

git status | indent
other_command | indent
于 2015-04-21T17:56:16.670 回答
16

感谢@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
于 2019-01-30T16:31:53.580 回答
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
于 2021-06-25T21:32:32.093 回答