![下一个命令输出在同一行? bash脚本](https://linux22.com/image/158114/%E4%B8%8B%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E5%9C%A8%E5%90%8C%E4%B8%80%E8%A1%8C%EF%BC%9F%20bash%E8%84%9A%E6%9C%AC.png)
我有以下简单的脚本:
echo "-------------------------- SOA --------------------------------"
echo " "
echo -n " ---------> "; dig soa "$1" +short | awk '{print $3}'
输出是这样的:
-------------------------- SOA --------------------------------
---------> 2019072905
现在我的问题是我可以在挖掘后发出“echo”命令吗?输出如下:
-------------------------- SOA -----------------------------
---------> 2019072905 <-------------
我试图搜索类似的案例,但没有找到任何相关的案例。
这可能吗?
提前致谢。
答案1
cmd=$(dig soa "$1" +short | awk '{print $3}'; echo -n \<----------;)
echo "-------------------------- SOA --------------------------------"
echo " "
echo -n " ---------> ";echo $cmd
答案2
我会用以下方式完成整个事情printf
:
#!/bin/sh
header='-------------------------- SOA --------------------------'
headerLength=$(awk '{print length()}' <<<"$header")
value=$(dig soa "$1" +short | awk '{print $3}')
valueString="-----------> $value <-------------"
valueLength=$(awk '{print length()}' <<<"$valueString")
offset=$(((headerLength + valueLength)/2+1))
printf "%s\n\n%${offset}s\n" "$header" "$valueString"
这样做的优点是无论值的长度是多少,总是显示居中(使用稍微修改的版本来value=$1
说明):
$ foo.sh 2019072905
-------------------------- SOA --------------------------------
-----------> 2019072905 <-------------
$ foo.sh "some random long string"
-------------------------- SOA --------------------------------
-----------> some random long string <-------------
$ foo.sh "foo"
-------------------------- SOA --------------------------
-----------> foo <-------------
答案3
#!/bin/sh
soa=$(dig soa "$1" +short | awk '{print $3}')
cat <<__EOF__
-------------------------- SOA -----------------------------
---------> $soa <-------------
__EOF__
顺便说一句,我认为这个问题是错误的,因为在 SOA 周围打印所有标头垃圾只会使使用此脚本的输出作为另一个脚本的输入变得更加困难……甚至当您当前不认为自己是这样的时候将来你可能需要这样做。在 unix 中,输出的冗长是一种“罪过”:) - 在编写脚本时,您应该始终认为您的输出最终可能会成为其他人(包括您自己)的输入。
我本来会忽略这个问题,但我更不喜欢另一个答案。如果你要做错事,你最好还是正确地做。
答案4
我没有 dig 所以在这个例子中使用了 echo :
$ echo '2019072905' | awk '
BEGIN { d=sprintf("%15s",""); gsub(/ /,"-",d); print d d, "SOA", d d ORS }
{ printf "%*s> %s <%s\n", 2*length(d)-length($0)/2+1, d, $0, d }
'
------------------------------ SOA ------------------------------
---------------> 2019072905 <---------------
$ echo '201' | awk '
BEGIN { d=sprintf("%15s",""); gsub(/ /,"-",d); print d d, "SOA", d d ORS }
{ printf "%*s> %s <%s\n", 2*length(d)-length($0)/2+1, d, $0, d }
'
------------------------------ SOA ------------------------------
---------------> 201 <---------------
$ echo '12345672019072905' | awk '
BEGIN { d=sprintf("%15s",""); gsub(/ /,"-",d); print d d, "SOA", d d ORS }
{ printf "%*s> %s <%s\n", 2*length(d)-length($0)/2+1, d, $0, d }
'
------------------------------ SOA ------------------------------
---------------> 12345672019072905 <---------------