向stdout添加空格

kol*_*rie 10 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.
Run Code Online (Sandbox Code Playgroud)

任何的想法?

编辑:添加了echo命令的引号,否则它们将不会被填充.

pax*_*blo 12

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

echo '    => installing prerequisite1'
Run Code Online (Sandbox Code Playgroud)

并通过输出来sed处理复杂的事情:

tar vzxf lostzilla.tar.gz 2>&1 | sed 's/^/   /'
Run Code Online (Sandbox Code Playgroud)

2>&1放输出和错误到标准输出流和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
Run Code Online (Sandbox Code Playgroud)

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

#!/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*
Run Code Online (Sandbox Code Playgroud)

sed如果它还没有这样做,这将通过缩进重新运行脚本.这样,您不必担心更改所有输出语句.我知道,有点黑客攻击,但我倾向于只做快速而肮脏的shell脚本所需的操作.