cria o arquivo da função

1
#!/bin/bash

# trims trailing spaces and tabs from file, using awk utility
function remove_trail() {

[ ! $# -lt 2 ] || { echo "Usage: $FUNCNAME file-to-trim out-file"; return 1; }

    # args
    in="$1"
    out="$2"

    # this check works fine...

    [ -f "$in" ] && return 0 || { echo "File \""$in"\" does not exist."; return 1; }

    # substitute tabs and spaces for nothing on $in arg, then output result to $out
    awk '{ sub(/[ \t]+$/, ""); print }' "$in" >tmp && mv tmp "$out"
    #however, after previous line I don't get my tmp file nor my $out file created.. WHY :O???
    # give user a friendly message
    echo 'Processing done.. Check your '"$out"' file.'
}

essa função é definida em .bashrc , então eu poderia usá-la diariamente como um tipo de construção ... então quando eu abrir o shell eu digite remove_trail file1 file2 para obter file2 escrito de file1 + removed_trailing_spaces.
Minha pergunta é: Por que não estou recebendo arquivos tmp e $ out criados no meu diretório?

    
por branquito 19.03.2014 / 14:49

2 respostas

2

O erro está na seguinte linha:

[ -f "$in" ] && return 0 || { echo "File \""$in"\" does not exist."; return 1; }

Você return da função se o parâmetro in da função for um arquivo. Isso explicaria a ausência do arquivo de saída.

Talvez você quisesse dizer:

[ -f "$in" ] || { echo "File \""$in"\" does not exist."; return 1; }

ou

[ ! -f "$in" ] && { echo "File \""$in"\" does not exist."; return 1; }

Além disso, você não verá o arquivo temporário ao movê-lo para a saída:

mv tmp "$out"
    
por 19.03.2014 / 15:00
2

Basta escrever como:

trim() { sed 's/[[:blank:]]*$//'; }

E use-o como:

trim < file1 > file2

O resto é supérfluo.

Para evitar que o arquivo de saída seja sobregravado, você faria:

trim() (
  set -C
  sed 's/[[:blank:]]*$//' > "$1"
)

e use-o como:

trim < file1 file2

(observe a ausência de > ).

Você também pode permitir que trim abra o arquivo de entrada, mas perderá a capacidade de realizar ações como:

cmd | trim out-file 
    
por 19.03.2014 / 15:10

Tags