Convertir un script bash multilínea en uno de una línea

Convertir un script bash multilínea en uno de una línea

Tengo un script como este:

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

¿Es posible convertir varios scripts en 1 línea como esta? (tal vez necesito eliminar #los comentarios).

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

Puedo cambiar la sintaxis de la declaración en el script anterior como:

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

Lo mismo se aplica a ifla condición. En todos los casos, debería generar una línea adecuada. ¿Cuál podría ser la forma automatizada de hacer esto?

Respuesta1

Analizar bash en oneliners es una tarea difícil...

De todos modos como punto de partida, aquí va una sugerencia para abarcar situaciones muy concretas como la presentada.

perl -p0e '
    s/#.*//; 
    s/;?\s+(do|done|then|else|fi)\s+/ ; $1 /g '

Respuesta2

Puedes probar lo siguiente:

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

información relacionada