Recuo de saída do Shell Script

1

Eu quero chamar um script de shell / aplicativo dentro de outro script. Cada linha do script contido deve ser recuada por dois espaços. Isso é possível?

A saída deve ser algo como isso.

I'm the main-scripts' output.
  I'm a second script, called inside the main-script.
  Every line of my output is indented by 2 spaces.
  This is not implemented inside of me, but in the main-script
  as I should also be called outside of the main-script and then
  my output shouldn't be indented.
Thats all from the second script.

Isso é possível e como?

    
por lschuermann 23.02.2016 / 12:27

2 respostas

1

Você pode usar sed ou awk para fazer isso. Por exemplo, no seu script principal, você poderia fazer:

# execute the command and pipe to sed
second-script | sed 's/\(.*\)/  /'

O comando sed acima simplesmente preenche dois espaços para cada linha de saída de second-script .

    
por 23.02.2016 / 14:45
0

Como sempre no Unix, existem opções.

paste

Use o utilitário paste com um arquivo LHS em branco, por exemplo:

cat ~/.bashrc | paste /dev/null -

O comando cat é um marcador para seu segundo script.

O comando paste foi projetado para pegar dois arquivos e colocá-los juntos, por exemplo:

$ paste file1 file2
file 1 line 1    <TAB>  file 2 line 1
file 1 line two  <TAB>  file 2 line 2
file 1 line 3    <TAB>  file 2 line iii

A maneira que estou usando é usar /dev/null como file1 e STDIN como file2 , especificado por - . Quando usado como entrada, /dev/null retorna caracteres NULL. Isso significa que cada linha de file2 , a saída de seu segundo script, é precedida por NULL seguido por um caractere TAB.

Você pode ir além: paste tem uma opção --delimiter , mas a especificação de dois espaços não fornece o efeito esperado: delimitador 1 é usado entre a primeira e a segunda coluna, delimitador 2 é usado entre o segundo e terceiro, e assim por diante.

paste|expand

Para obter um recuo de dois espaços, você usaria a planície paste canalizada novamente por meio de expand -2 : isso transforma todas as guias em dois espaços:

cat ~/.bashrc | paste /dev/null - | expand -2

Isso se comportará exatamente como você especificou.

sed ou awk

No entanto, outra abordagem é usar sed ou awk :

cat ~/.bashrc | sed 's/^/  /'

Isso procura o início da linha (" ^ ") e substitui ou realmente insere um par de espaços.

cat ~/.bashrc | awk '{printf "  %s\n",$0}'

Isso pega cada linha completa (" $0 ") e formata com printf , usando o especificador de formato de dois espaços, seguido pela string a ser impressa, seguido por uma nova linha.

    
por 21.05.2016 / 00:45