当我在 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/