Converter script bash multilinha em uma linha

Converter script bash multilinha em uma linha

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 esta? (talvez eu precise excluir #declarações de comentários).

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

Posso alterar a sintaxe da instrução no script acima, como:

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

O mesmo se aplica à ifcondição. Em todos os casos deve gerar 1 linha adequada. Qual poderia ser a maneira automatizada de fazer isso?

Responder1

Analisar o 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 '

Responder2

Você pode tentar o seguinte:

awk '{ printf "%s", $0 }' script.txt

informação relacionada