Converter o script multiline bash para uma linha

1

Eu tenho um script assim:

for f in *
do
    #if condition
    if [[ -d $f ]]; then
        echo "$f is a directory";
    else
        echo "$f is not a directory";
    fi
done

É possível converter vários scripts em uma linha como essa? (talvez eu precise excluir # declaração (s) comentário).

for f in *; do  if [[ -d $f ]]; then  echo "$f is a directory"; else  echo "$f is not a directory"; fi done

Eu posso mudar a sintaxe da declaração no script acima, como:

  1. for f in *
  2. for f in *;
  3. for f in *;do

O mesmo se aplica à condição if . Em todos os casos, deve gerar uma linha 1 apropriada. Qual poderia ser a maneira automatizada de fazer isso?

    
por snoop 05.10.2015 / 11:37

2 respostas

2

Analisar bash em oneliners é uma tarefa difícil ...

De qualquer forma, como ponto de partida, aqui vai uma sugestão para cobrir situações muito específicas como a apresentada

perl -p0e '
    s/#.*//; 
    s/;?\s+(do|done|then|else|fi)\s+/ ; $1 /g '
    
por JJoao 05.10.2015 / 13:33
0

Você pode tentar o seguinte:

awk '{ printf "%s", $0 }' script.txt
    
por nickchalkida 05.10.2015 / 13:38