2017-01-09 7 views
0

mein Skript scheint nicht einmal zu arbeiten zugreifen, obwohl ich einen Exit-Status von 0kann nicht Befehlszeilenargumente aus dem Inneren einer Funktion

Es bekommen arbeitete, bis ich es eine Funktion mit dem

makedrivetree() 
{ 
} 

gemacht

Syntax.

Wenn Sie das entfernen und alles zwischen den while und done halten, funktioniert es gut.

Ich habe es gespeichert in meinem ~/bin-Ordner als makedrivetree

Hier ist die volle Funktion:

#!/usr/bin/env bash 

# a script to write the contents of a directory in tree form and save it to a .txt file 

### CONSTANTS 

DATE="$(date +%Y%m%d)" 

### FUNCTIONS 

makedrivetree() 

{ 
    while [ "${*}" != "" ] ; do 

     #set $DRIVE as the first arugment sent to script 
     DRIVE="${1}" 
     #set $OUTPUT 
     OUTPUT="/Users/$USER/Desktop/$(basename "${DRIVE}")_contents_"${DATE}".txt" 
     #run tree 
     tree -I "*.dpx" --si --du -U -o "${OUTPUT}" "${DRIVE}" 

     #check $? for errors 
     if [ "$?" -eq "0" ] ; then 
      echo 'done. moving to next drive.' 
     else 
      echo 'error' 
     fi 

     shift 

    done 
} 

#call the function(s) 

makedrivetree 

echo 'makedrivetree exited with status' $? 

exit 
+0

Sie keine Parameter an die Funktion übergeben, das ist wahrscheinlich das Problem. – Aaron

+0

hi @Aaron können Sie eine Reparatur erarbeiten oder vorschlagen? Vielen Dank! – Bleakley

+0

Oh, ich verstehe. Ich muss etwas wie 'makedrivetree $ @' machen, wenn ich die Funktion aufruft. – Bleakley

Antwort

2

Sie sind kein Argument für diese Funktion übergeben. Schauen Sie sich Ihre erste Codezeile in der Funktion

while [ "${*}" != "" ] 

was Sie haben es wurde geprüft, ob ein Argument an die Funktion übergeben wurde. Wenn Sie die Funktion (maderivetree) aufgerufen haben, haben Sie kein Argument übergeben. Um alles zusammenzufassen, wenn Sie Ihre Funktion aufgerufen haben, wird die while-Schleife aufgrund der von Ihnen angegebenen Bedingung nie ausgeführt.

+0

Kühl. Vielen Dank! @ 0.sh. – Bleakley

+0

Gibt es eine Präferenz, Parameter über '$ @' oder '$ 1' zu übergeben? – Bleakley

+0

Warum hat es auch immer noch mit einer 0 beendet, wenn die Funktion nie wirklich lief? – Bleakley

0

Aufruf der Funktion mit makedrivetree "[email protected]" löste das Problem.

(Excellent Tipps/Erklärungen/Antworten in den Kommentaren, auch)

+0

Das ist eigentlich fehlerhaft. Verwenden Sie 'makedrivetree '$ @" 'stattdessen - mit' $ @ 'nicht in Anführungszeichen, dann' ./IhrProgramm "erstes Argument" "zweites Argument" 'wird genauso übergeben wie' ./IhrProgramm "erstes" "Argument" "Sekunde "" Argument "". –

+0

Danke! @CharlesDuffy – Bleakley

Verwandte Themen