Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [BASH] controllare path

    In uno script ho necessità, fra le altre cose, di eliminare una cartella all'interno di un certo percorso.
    Il nome della cartella nello specifico deve essere passata come parametro allo script, mentre la prima parte del percorso si trova già nello script come variabile.

    codice:
    elif [[ $1 = "d" ]]; then
    	if [[ ! -z $2 ]]; then
    		to_delete=${2%/}
    		echo "Are you sure to remove  directotry $workdir/$to_delete?"
    		read answer
    		[...]
    	else
    		msg=1
    	fi
    else
    Il problema è che se il nome della cartella ($2) per errore o volontariamente fosse qualcosa del tipo "../../../qualcosa" allora il path farebbe riferimento ad una dir superiore a quella dove lo script dovrebbe operare. Nel caso venga eseguito da un utente normale al max potrebbe danneggiare solo le sue cartelle, ma se fosse root a farlo i danni potrebbero essere ingenti.
    Vorrei evitare che lo script accettasse solo path effettivamente interni a $workdir. Quale è secondo voi la soluzione migliore?
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  2. #2
    Avrei pensato di fare qualcosa del genere, che ne dite?

    codice:
    to_delete=${2//..\//} # QUI
    	to_delete=${to_delete%/}
    	if [[ ! -z $to_delete ]]; then
    in modo da rimuovere tutte le occorrenze di "../" dalla stringa del path.

    PS: devo ancora aggiungere una riga di controllo per verificare che il path risultante effettivamente esista prima di chiedere se si vuole procedere o meno.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  3. #3
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Se vuoi pulire il path trovando quello effettivo, privo di ./ e ../ potresti fare qualcosa del tipo:
    codice:
    DIR=$PWD;
    cd $PATH;
    PATHPULITO=$PWD;
    cd $DIR
    o piu' semplicemente:
    codice:
    pushd $PATH;
    PATHPULITO=$PWD;
    popd
    $PATH e' il percorso che vuoi pulire, $PATHPULITO conterra' il percorso ripulito da ./ e ../

    fatto cio' ti basta controllare che $PATHPULITO inizi con $workdir
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  4. #4
    Veramente spettacolare, gran bel metodo grazie, il mio era un po'

    Per controllare che $PATHPULITO inizi per $workdir ho fatto così. Visto che esiste sempre un metodo migliore, posto il codice per avere eventuali suggerimenti
    codice:
    if [[ ! -z `expr match "$PATHPULITO" "\($workdir\)"` ]]; then
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.