[linux] Re: file encoding

Kees Theunissen theuniss op rijnh.nl
Za Jul 14 14:37:27 CEST 2007


On Sat, 14 Jul 2007, Wybo Dekker wrote:

>Voor de liefhebber - dit is wat ik er via Hugo's file(1) suggestie
>voor gemaakt heb (jammer dat file voor latin1, en misschien ook voor
>de andere ISO-8859 sets, ISO-8859 geeft en niet ISO-8859-1:
>
>#!/bin/sh
># guessencoding - guess the encoding of an input file or stdin
># Usage:
>#    guessencoding file
>#    guessencoding <file
>
>function die {
>   echo $@ >/dev/stderr
>   $delete
>   exit 1
>}
>f="$1"
>if [ "$f" = "" ]; then
>   # stdin: save
>   f=`mktemp`
>   cat - > $f
>   delete="rm $f"
>elif [ ! -f "$f" ]; then
>   die not a regular file
>fi
>if [ -s "$f" ]; then # not empty?
>   encoding=`file "$f"`
>   case "$encoding" in
>   *text*) ;;
>   *) die "not a text file ($encoding)" ;;
>   esac
>   encoding=${encoding/*: /}
>   encoding=${encoding/ */}
>   # file(1) does not distinquish between ISO-8859-x :-((
>   if [ $encoding = ISO-8859 ]; then encoding=$encoding-1; fi
>   echo $encoding
>else # denote empty file as ASCII:
>   echo ASCII
>fi
>$delete
>
Hmm, je definieert "$delete" alleen maar als er geen bestandsnaam
opgegeven wordt op de commandline. In alle andere gevallen
vertrouw je er dus impliciet op dat $delete niet is gedefinieerd
in de environment vanwaaruit het script wordt gestart.
Het lijkt me robuster om in je script zelf te verzekeren dat
die variabele geen ongewenste waarde heeft. Het script beginnen
met delete=":" moet voldoende zijn.


Groeten,

Kees.

-- 
Kees Theunissen
F.O.M.-Instituut voor Plasmafysica Rijnhuizen, Nieuwegein
E-mail: theuniss op rijnh.nl,     Tel: 030-6096724,     Fax: 030-6031204



More information about the Linux mailing list