当我在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脚本所需的操作.