[Linuxtrent] Re: Shell script e link simbolici

  • From: Flavio Visentin <visentin@xxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: 28 Apr 2003 15:17:39 +0200

> Ovviamente questo approccio ha come limite il fatto che la
> visualizzazione di ls -l sia quella classica di bash che mostra a cosa
> punta un link e che nel nome del file non vi siano caratteri ">".

Dimenticavo di specificare che questo esempio non è ricorssivo, quindi
nel caso di link che puntano a link che puntano a file il problema
persiste. Per rendere lo strumento ricorsivo basta sostituire all'if il
while e a $0 $LINKEDFILE impostandolo propriamente a $0 all'inizio.
Fai comunque attenzione che nel caso di link che puntano a se stessi
potresti avere casini.
Segue esempio modificato.

#!/bin/bash
# Memorizza in basedir la directory di invocazione del comando
LINKEDFILE="$0"
BASEDIR=`dirname "$LINKEDFILE"`

# Verifica se il comando è un link simbolico
while [ -L "$LINKEDFILE" ]
do
    # Estrae il percorso del file linkato. Non accetta ">" nel nome file
    LINKEDFILE=$(ls -l "$LINKEDFILE" | cut -d'>' -f2 | cut -c2- )
    # Verifica se il link è assoluto o relativo
    if [ "$LINKEDFILE" = "${LINKEDFILE##/}" ]
    then
        # se è relativo lo accoda al percorso attuale
        BASEDIR=$BASEDIR/`dirname "$LINKEDFILE"`
    else
        # se è assoluto sostituisce il percorso attuale
        BASEDIR=`dirname "$LINKEDFILE"`
    fi
done
# Visualizza il percorso determinato
echo $BASEDIR
> Ciao
> Flavio Visentin

-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con SOGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: