2016-08-05 8 views
0

Ich versuche, ein Temp-Verzeichnis zu erstellen, kopieren Sie einige Dateien, führen Sie eine Verarbeitung durch, und löschen Sie das Verzeichnis. Bisher habe ich:Fehler mit Bash Script, um ein Temp-Verzeichnis zu erstellen und einige Dateien zu kopieren

#!/usr/bin/env bash 

__tmpdir="mktemp -d /Users/Riwaz/support.XXXXXXXXXX" #Create temp directory; store address 
cp /some_location/checkstyle.xml $__tmpdir #Copy a file into the directory 
cd $__tmpdir 
tar -czvf result.tar.gz * 
cp result.tar.gz /Users/Riwaz/ 
rm $__tmpdir 

Aber wenn ich so mit sh laufen, erhalte ich:

line 7: cd: mktemp: No such file or directory 
rm: mktemp: No such file or directory 
rm: -d: No such file or directory 
rm: /Users/Riwaz/support.XXXXXXXXXX: No such file or directory 

die zeigt, dass mktemp Aussage nie verarbeitet wird und Variable enthält den eigentlichen Befehl und nicht die Adresse. Wie würde ich bash dazu bringen, den Befehl auszuwerten und stattdessen die Adresse zu speichern? Ich habe mich mit "", {} und eval herumgesprochen, konnte es aber nicht zum Laufen bringen.

+0

mktemp Erzeugt 0 auf Erfolg aus dem Drucker und> 0, wenn ein Fehler auftritt. – zee

Antwort

0

Sie müssen Ihr Skript wie folgt ändern: Erste Zeile ist einfach Zuweisung stattdessen müssen Sie es in Unter Shell ausführen und zuweisen.

#!/usr/bin/env bash 
__tmpdir=(mktemp -d /Users/Riwaz/support.XXXXXXXXXX) #Create temp directory; store address 
cp /some_location/checkstyle.xml $__tmpdir #Copy a file into the directory 
cd $__tmpdir 
tar -czvf result.tar.gz ./* 
cp result.tar.gz /Users/Riwaz/ 
rm $__tmpdir 
0

mktemp beendet 0 bei Erfolg und> 0, wenn ein Fehler auftritt. . versuche so etwas. Stellen Sie sicher, dass Sie über ausreichende Berechtigungen:

tempfoo=`basename $0` 
      TMPFILE=`mktemp -d /tmp/${tempfoo}.XXXXXX` 
      if [ $? -ne 0 ]; then 
        echo "$0: Can't create temp file, exiting..." 
        exit 1 
      fi 

So wird das Skript die stdr erro Nachricht im Falle eines exit > 0 geben. Von hier aus können Sie nur tun && cd tempfoo and echo $PWD || echo "can not access $ tempfoo"

der Rest hier gehen ...

Verwandte Themen