# bash script $HOME auflösen



## FrankBooth (26. Oktober 2012)

Hallo zusammen,

ich schreibe an einem Skript, dass Dateipfade aus einer Datei ausließt und die Dateien in ein Zielverzeichnis verschiebt. Leider kann an einer Stelle $HOME nicht aufgelöst werden. Hier der relevante Code:


```
#Methode zum testen ob eine Datei existiert, 1:existiert, 0:existiert nicht
is_existing ()
{    
     echo $HOME
     if [ ! -f $1 ] ;
     then 
        return 0
     else
    	return 1
     fi
}


#Daten aus Datei lesen und verschieben, wenn Datei vorhanden
for i in $(cat $dataFile)
do
echo $i
is_existing $i
if [ "$?" -eq 1 ];
   then mv $i $targetDirectory
   else echo "Datei nicht vorhanden:"
        echo $i
fi
done
```

In der Methode is_existing () wird in der  Zeile


```
if [ ! -f $1 ] ;
```

in $1 wird $HOME nicht aufgelöst.  echo $HOME gibt den Pfad richtig aus

Aus der Datei kommen die Pfade und Namen der Dateien:

$HOME/daten.dat <- geht nicht
/f/frankbooth/daten.dat <-geht

Denke mal, es wird $HOME/daten.dat als string verarbeitet und daher nicht aufgelöst. Kann jemand helfen? 
Danke und schönes WE!

Frank


----------



## deepthroat (26. Oktober 2012)

Hi

Es wäre ziemlicher Unfug Variablen mehrfach zu expandieren bis keine Variablenexpansion mehr möglich ist, meinst du nicht auch?


```
$ x='my $HOME is my castle'
$ echo $x
my $HOME is my castle
$ eval "echo $x"
my /home/user is my castle
$ echo "${x/\$HOME/$HOME}"
my /home/user is my castle
```
Die letzte Variante würde ich vorziehen, falls du nicht vorhast beliebige Variablen und Befehle aus der Datei auszuführen, a la:

```
/toller/pfad/$(rm -rf /)
```


----------

