Следующая команда выводится в той же строке? Сценарий Bash

Una solución con GNU sed:

sed -e 's/} {/\n/g' -e 's/^{//' -e 's/}//' input-file > output-file
2
30.07.2019, 14:28
4 ответа
cmd=$(dig soa "$1" +short | awk '{print $3}'; echo -n \<----------;)

echo "-------------------------- SOA --------------------------------"
echo " "
echo -n "      ---------> ";echo $cmd
4
27.01.2020, 21:52
#!/bin/sh

soa=$(dig soa "$1" +short | awk '{print $3}')

cat <<__EOF__
-------------------------- SOA -----------------------------

            ---------> $soa <-------------
__EOF__

Кстати, я думаю, что вопрос неправильно -озаглавлен, потому что печать всего этого мусора заголовков вокруг SOA просто бессмысленно усложняет использование вывода этого скрипта в качестве входных данных для другого скрипта... и даже когда вы этого не делаете. В настоящее время вы не думаете, что вам когда-либо понадобится это сделать, в будущем вам может понадобиться. Многословие в выводе является "грехом" в Unix :)-. При написании скрипта вы всегда должны думать, что ваш вывод может оказаться чьим-то (в том числе и вашим )вводом.

Я бы проигнорировал этот вопрос, но другой ответ мне не понравился еще больше. Если вы собираетесь сделать что-то неправильно, вы можете сделать это правильно.

2
27.01.2020, 21:52

Вместо этого я бы сделал все это в 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 <-------------
2
27.01.2020, 21:52

У меня нет dig, поэтому я использовал эхо для этого примера:

$ 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 <---------------
-1
27.01.2020, 21:52

Теги

Похожие вопросы