bash - 向标准输出添加空格

标签 bash

当我在 bash shell 脚本中运行命令时,是否可以在每个输出到 stdout(和 stderr,如果可能)的左侧添加空格?

我想做这样的事情:

#!/bin/bash
echo Installing: Something
echo "    => installing prerequisite1"

## INSERT MAGICAL LEFT SPACES COMMAND HERE ##

apt-get install -q -y prerequisite

## ANOTHER MAGICAL CANCELLING LEFT SPACES COMMAND HERE ##

echo "    => installing prerequisite2"
# ... the padding again ...
wget http://abc.com/lostzilla.tar.gz
tar vzxf lostzilla.tar.gz
cd lostzilla-1.01
./configure
make && make install
# ... end of padding ...

echo Done.

有什么想法吗?

编辑:在 echo 命令中添加引号,否则它们不会被填充。

最佳答案

是的,您可以为简单的事情引用它们:

echo '    => installing prerequisite1'

对于复杂的事情,通过 sed 管道输出:

tar vzxf lostzilla.tar.gz 2>&1 | sed 's/^/   /'

2>&1 将 stdout 和 stderr 放入 stdout 流,sed 用三个空格替换每个行首标记。

我不确定这在像 wget 这样可以进行各种光标操作的东西上的效果如何。

此处显示的示例:

pax> ls -1 p*
phase1.py
phase1.sh
phase2.py
phase2.sh
primes.c
primes.exe
primes.sh
primes.stat

pax> ls -1 p* | sed 's/^/   /'
   phase1.py
   phase1.sh
   phase2.py
   phase2.sh
   primes.c
   primes.exe
   primes.sh
   primes.stat

我过去使用的一个技巧是确保脚本本身处理缩进:

#!/bin/bash
if [[ "${DONT_EVER_SET_THIS_VAR}" = "" ]] ; then
        export DONT_EVER_SET_THIS_VAR=except_for_here
        $0 | sed 's/^/   /'
        exit
fi
ls -1 p*

这将通过 sed 重新运行带有缩进的脚本(如果它还没有这样做的话)。这样,您就不必担心更改所有输出语句。我知道有点 hack,但我倾向于只做快速而肮脏的 shell 脚本所必需的事情。

关于bash - 向标准输出添加空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286615/

相关文章:

git - linux PS1 - 仅在 git repo 中显示分支名称

python - 在 python 中执行 bash 脚本

bash - 登录 shell 和交互式 shell 之间有什么区别?

linux - 如何在linux shell脚本中使用变量遍历路径

python - 如何检查子进程的 Popen 是否抛出错误

linux - 从文件中 grep 多个模式并将它们保存到不同的文件中

string - UNIX 巴什 : extracting number from string

linux - 使用 awk 查找可变长度的正则表达式并根据找到的长度编辑以下行

bash - 从紧凑的字符串表示创建分层目录树

android - 如何在android中使用unix命令 'cat'连接sd卡中的两个视频文件?