Wie erweitern bash-Skripte Dateieffekte?

570
vfclists

In diesem Code excludespecwird erwartet, dass die Variable mit dem gesamten Teilstring übereinstimmt. Es scheint jedoch, dass sie die tatsächlichen Dateien ausgleicht, die bei ihrer Ausführung zu ihr passen, anstatt ihre genaue Darstellung mit dem Befehl tar zu übergeben.

excludespec=$\_$USER\_Hostname.bkcd_backup*

Das Endergebnis ist, dass das erstellte Archiv nicht mit der Ausschlussliste übereinstimmt.

tar: .: file changed as we read it

Tut die Saite, die sie definiert, etwas, von dem ich nichts weiß?

Hier ist der Code:

#!/bin/sh # bkcd - backup current directory in situ  DMY_M() { date +%Y%m%d_%H%M }  timestring=$(DMY_M) echo `pwd` - $timestring > .bkcdspec  filename=$\_$USER\_`hostname`.bkcd_backup.$timestring.tar.gz  excludespec=$\_$USER\_`hostname`.bkcd_backup* fullexclude="$excludespec"tar.gz  echo excludespec - $excludespec echo filename - $filename echo fullexclude - $fullexclude  tar -cpzf $filename --exclude=$fullexclude . rm .bkcdspec 
0
Angenommen, `/ bin / sh` verweist auf` / bin / dash` (normalerweise), ist Ihr Skript kein * bash * -Skript, es ist ein * dash * -Skript. Dennis vor 11 Jahren 0
Sie müssen nicht zweimal dieselbe Frage stellen (http://stackoverflow.com/q/14425149/7552). glenn jackman vor 11 Jahren 1

1 Antwort auf die Frage

2
Nicole Hamilton

Die Platzhalterung erfolgt nach Variablensubstitution. Verwenden Sie doppelte Anführungszeichen um die $varReferenz, um den Literalwert einer Substitution einzufügen, aber Platzhalter zu vermeiden .